黑马程序员技术交流社区
标题:
关于线程同步同步代码位置的问题
[打印本页]
作者:
黄陂酷歌
时间:
2014-3-22 14:03
标题:
关于线程同步同步代码位置的问题
class Bank{
private int sum;
Object obj = new Object();
public synchronized void add(int n){ //同步为什么在这个位置
sum = sum + n;
try{Thread.sleep(10);}catch(Exception e){};
System.out.println("sum="+sum);
}
}
class Cus implements Runnable{
private Bank b = new Bank();
public void run(){ //为什么这个位置不需要同步
for(int x=0;x<3;x++)
b.add(100);
}
}
class ThreadDemo{
public static void main(String[] args){
Cus c = new Cus();
Thread t1 = new Thread(c);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
复制代码
毕老师说只有一条语句的位置不需要同步,有一条以上的语句且有共享数据的时候才要同步,是这样的吗?
作者:
my_android_drea
时间:
2014-3-22 16:05
本帖最后由 my_android_drea 于 2014-3-22 16:08 编辑
上面的回复出现问题了!!!!显示不了,无语
因为这里可能会出现问题,毕老师用sleep(10)让这个问题产生。当一个线程进入执行了 sum=sum+n 后,这时假如 sum=200 (注意:没执行下一句打印啊), 接着该线程sleep, 另一线程此时进来并执行了 sum=sum+n 这时 sum=300 等线程“醒”后,执行下一句,打印 ,这时打印出来的 sum=300 而不是200! 那么显示的结果就有问题啦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2