关于sleep会让效果更明显的想法

来源:4-3 volatile不能保证原子性(中)

xiong520

2017-07-07 12:35

会不会是因为你的线程在sleep,然后在主线程的while循环中的判断条件不满足了,就是因为有些线程还在sleep,判定的就不是处于active状态,就进行了getNumber的操作,所以才会有这么明显的体现。

写回答 关注

1回答

  • 是麥兜啊
    2017-07-08 13:23:51

    while循环内判断的是所有的子线程是否都运行完了,如果是的话,继续下面的打印操作。

    如果不用synchronized或不加锁,程序运行时,有时候getNumber获得的值小于500,是因为volatile定义的变量不能保证原子性,所以会出现两个线程同时写number时,number只增加了1,没有增加2,所以影响到number变量最终的值不是500,而是499或498了。

    xiong5...

    在sleep的线程算是运行完还是没运行完?

    2017-07-08 13:34:05

    共 1 条回复 >

细说Java多线程之内存可见性

用两种方式实现内存可见性,代领大家深层次学习Java中的内存

55908 学习 · 74 问题

查看课程

相似问题