日期:2014-05-20  浏览次数:20755 次

问个关于线程同步的问题
下面是我对线程同步的理解:
线程同步这个技术是在当同一块资源或者代码块被多个线程访问或调用,举个例子,当线程A和线程B同时访问了同一个全局变量 var1的话,假设 var1 的值为 5, 那么线程A 和 线程B 以 var1 必须大于0为条件同时开始对 var1 变量做减法操作,那么可能会出现当变量 var1 为 0时,可能线程A 或线程B 仍然在对变量 var1 进行减法操作,此时便有可能出现变量 var1 的值超出预期范围的情况发生.


我自己写了个程序实验了一下,运行了很多次,没有出现过我刚才说的那种超出预想结果的情况。
请问各位对这个情况怎么理解呢?又或者说我对线程同步的理解有误?

------解决方案--------------------
发下你的程序看看呢 我写了个测试的会出现-1的情况。

public class Test {

public static void main(String[] args) throws Exception {

new Thread(new TestThread()).start();
new Thread(new TestThread()).start();
}
}

class TestThread implements Runnable {
private static int i=10;
public void run() {
while(i>0){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i--;
System.out.println(Thread.currentThread().getId()+":"+i);
}
}
}

------解决方案--------------------
线程不安全的代码并不是每次都会出错,这正是它危害最大的地方: 

一个偶尔会发生的错误比一个每次都会发生的错误排查起来要难得多,这样的错误隐患可能会通过所有的测试,被用户使用很长一段时间然后才发生,然后带来非常高昂的代价。