Implementations of the Java Virtual Machine are encouraged to avoid splitting 64-bit values where possible. Programmers are encouraged to declare shared 64-bit values as volatile or synchronize their programs correctly to avoid possible complications.
从规定中我们可以知道
- 对于64位的long和double , 如果没有被volatile修饰 , 那么对其操作可以不是原子的 。在操作的时候 , 可以分成两步 , 每次对32位操作 。
- 如果使用volatile修饰long和double , 那么其读写都是原子操作
- 对于64位的引用地址的读写 , 都是原子操作
- 在实现JVM时 , 可以自由选择是否把读写long和double作为原子操作
- 推荐JVM实现为原子操作
在硬件 , 操作系统 , JVM都是64位的情况下呢?对于64bit的环境来说 , 单次操作可以操作64bit的数据 , 即可以以一次性读写long或double的整个64bit 。因此我们可以猜测 , 在64位的环境下 , long和double的读写有可能是原子操作 。在换了64位的JVM之后 , 多次运行 , 结果都是正确的
64-bit运行正确运行正确结果表明 , 在64bit的虚拟机下 , long的处理是原子性的 。
推荐阅读
- 福建中小叶种工夫红茶
- 几种处理JavaScript异步操作的办法
- 如何在 Java 中安全地使用子类型
- Java虚拟机最多支持多少个线程的探讨
- 如何通过“import”语句确定在Python中导入了哪个文件?详解
- Java基于Solr海量数据搜索,搜索引擎的实现
- 纯JavaScript实现的调用设备摄像头并拍照的功能
- PHP中常见的五种设计模式
- 100cm的伞大不大 直径100cm的雨伞小吗
- 手机游戏|本科毕业起薪8000,为何学IT就业容易又收入高?有孩子读高中速看