关于同步方法的问题

来源:5-1 总结及展望

慕粉9344391

2017-06-14 17:23

代码如图 

把需要同步的代码  封装到方法中  

两个线程为什么会打印相同的结果



http://img.mukewang.com/5940fdd600016bd314190929.jpg

写回答 关注

1回答

  • 黄子衣
    2017-06-17 22:30:22
    已采纳

    解释:当线程1将piao()方法调入栈中执行时,线程2也将piao()方法调入栈中执行,但是由于piao()方法被锁所以线程2处于等待,然而此时线程2已经读取了内存中的 x 的值,所以当线程1执行完成虽然修改了 x 的值,但是由于线程2已经读取了 x 的值,所以修改后的 x 的值并没有被线程2读取。

    注意:1、可以给x添加volatile修饰符,这样线程就能读取正确的值

              2、一般情况下对于并发共享的类最好不要拥有状态,容易出现并发问题

    qq_船到桥... 回复慕UI180...

    不是这个加volatile的问题,是在Test1的run方法中,不管是线程t1还是线程t2都是进去后都new了一个x,此时线程t1中的和线程t2的x是不同的,所以输出会出现重复的计数

    2018-06-22 10:36:13

    共 3 条回复 >

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186068 学习 · 464 问题

查看课程

相似问题