java内存模型将没有被volatile修饰的64位的数据的读写操作划分为两次32为的操作来进行,这样的话,多线程并发,就会存在线程可能读取到“半个变量”的值,不过,这种情况非常罕见,目前各平台的商用虚拟机几乎都选择把64位的读写作为原子操作来实现规范的。
因此,虽然你知道了java内存模型对long和double型的变量定义了特殊规则,但是你也不用专门对这两种类型的变量声明为volatile,因为上面说了,没有虚拟机真的这样实现了。
java内存模型将没有被volatile修饰的64位的数据的读写操作划分为两次32为的操作来进行,这样的话,多线程并发,就会存在线程可能读取到“半个变量”的值,不过,这种情况非常罕见,目前各平台的商用虚拟机几乎都选择把64位的读写作为原子操作来实现规范的。
因此,虽然你知道了java内存模型对long和double型的变量定义了特殊规则,但是你也不用专门对这两种类型的变量声明为volatile,因为上面说了,没有虚拟机真的这样实现了。