最赞回答 / 鬼羽子
32bit数据的读写是一个原子操作,对64bit数据加volatile仅仅只是保证数据的读写具有不可重入性以及可见性——这样就够了。第一个32bit读完之后,才允许读第二个32bit,且必须从主线程内存中刷新,这样可以保证数据的有效性。
2015-05-17
已采纳回答 / passionfoure
这里面有两个VOLATILE变量,它包含了一个不变式就是LOW<UP( if (value > upper) 和 if (value < low) )public class A { private volatile int low=0; private volatile int up=100; public int getLow() { return low; } public int getUp() { return up; } public void ...
2015-05-16
最赞回答 / meetyu
volatile本身不保证获取和设置操作的原子性,仅仅保持修改的可见性。但是java的内存模型保证声明为volatile的long和double变量的get和set操作是原子的
2015-05-06
已采纳回答 / MartonZhang
出现0是因为读线程先得到了执行,读线程执行完,写线程才执行,这个我里面也有讲到,你稍微注意下,在“synchronized实现可见性(下)”的第03:30之后!另外,慕课网这点估计剪切的估计太快了,有点不太容易注意到,可以在写线程和读线程之间加个休眠操作,让写线程执行完,读线程在执行,也可以使用wait和notify来控制线程执行的顺序!
2015-04-05