
64位 long、double变量的读写可能不是原子操作
对64位变量的读写可能不是原子操作
CPU在执行时会很快地刷新缓存
final也可以保证内存可见性
课程总结3
常见问题2:对于64位(long、double)变量的读写可能不是原子操作
问:没有实现保证可见性的措施,很多时候共享变量依然能够在主内存和工作内存见得到及时的更新?
课程总结2
内存可见性课程总结
synchronized 和 volatile 的比较
补充知识点 2:
内存可见性 课程总结
课程总结很好
java内存模型允许JVM将没有被volatile修饰的64位数据类型的读写划分为两次32位的读写操作来进行(例如double和long)
导致问题:可能会出现读取到"半个变量"的情况
解决方法:加volatile关键字
long与double变量的读写可能不是原子操作
final也可以保证内存可见性
2
1
来自 yanya2013
volatile本身不保证获取和设置操作的原子性,仅仅保持修改的可见性。但是java的内存模型保证声明为volatile的long和double变量的get和set操作是原子的
两次操作变一次操作
final 也可以保证内存可见性