Ant*_*wan 7 java multithreading atomicity
long并且double读取和写入操作不是原子的,因为它们的大小超过了cpu字大小.
那么long,double如果我有64位机器,我可以获得原子读写操作吗?
Gra*_*ray 11
如果我有64位机器,我可以获得long和double的原子读写操作吗?
答案是"也许".答案取决于JVM实现以及机器架构.引用Java语言定义17.7:
某些实现可能会发现将64位长或双值上的单个写操作划分为相邻32位值上的两个写操作很方便.为了效率,这种行为是特定于实现的; Java虚拟机的实现可以自由地以原子方式或分两部分执行对long和double值的写入.
鼓励Java虚拟机的实现避免在可能的情况下拆分64位值.建议程序员将共享的64位值声明为volatile或正确同步其程序以避免可能的复杂情况.
这是一个关于在读取和写入64位值时确保原子性的好页面.