课程
/后端开发
/Java
/细说Java多线程之内存可见性
会不会是因为你的线程在sleep,然后在主线程的while循环中的判断条件不满足了,就是因为有些线程还在sleep,判定的就不是处于active状态,就进行了getNumber的操作,所以才会有这么明显的体现。
2017-07-07
源自:细说Java多线程之内存可见性 4-3
正在回答
while循环内判断的是所有的子线程是否都运行完了,如果是的话,继续下面的打印操作。
如果不用synchronized或不加锁,程序运行时,有时候getNumber获得的值小于500,是因为volatile定义的变量不能保证原子性,所以会出现两个线程同时写number时,number只增加了1,没有增加2,所以影响到number变量最终的值不是500,而是499或498了。
xiong520 提问者
举报
用两种方式实现内存可见性,代领大家深层次学习Java中的内存
5 回答sleep作用
2 回答用Join关键字替换While那个判断效果是一样的嘛?
2 回答关于long和double非原子性的解决办法
2 回答关于同步锁,你在主线程里写的那个不会进行重排序?
2 回答关于重排序