17.7. Non-Atomic Treatment of double and long

For the purposes of the Java programming language memory model, a single write to a non-volatile long or double value is treated as two separate writes: one to each 32-bit half. This can result in a situation where a thread sees the first 32 bits of a 64-bit value from one write, and the second 32 bits from another write.

Writes and reads of volatile long and double values are always atomic.

Writes to and reads of references are always atomic, regardless of whether they are implemented as 32-bit or 64-bit values.

Some implementations may find it convenient to divide a single write action on a 64-bit long or double value into two write actions on adjacent 32-bit values. For efficiency's sake, this behavior is implementation-specific; an implementation of the Java Virtual Machine is free to perform writes to long and double values atomically or in two parts.

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位的mac上,long和int都不具有原子性,而在64位的debian上,long和int都具有原子性,所以,在不同的操作系统上是不一样的。所以,对于数值类型的变量如果是竞争的,就要显式的使用锁。

但是,对于读写references,都是atomic的。

另外,使用volatile关键字也可以使得long和double具有原子性。

最新文章

  1. 18.Java泛型
  2. Jquery中的(function($){...})(jQuery)
  3. 微信h5页面禁止下拉露出网页来源
  4. win7环境下安装运行gotour【转载整理】
  5. C#-WinForm-客户端程序-Form基本属性
  6. HDU 1452 (约数和+乘法逆元)
  7. UI3_UIViewController生命周期
  8. 设置Windows的TCP/IP属性和内部网络号码
  9. Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.
  10. 进程外Session和进程内Session存储
  11. win32加载图片获得像素值
  12. 深入css布局篇(1) — 盒模型 & 元素分类
  13. 为什么我的Linux ls命令不能用了?
  14. Execution failed for task ':app:processDebugResources'
  15. JS隐藏号码中间4位
  16. Java8中的HashMap分析
  17. Github的建立及心得体会
  18. RequestMethod用法小结和注意事项
  19. centos官网下载旧版本办法
  20. 蓝桥杯--乘积最大(数字DP)

热门文章

  1. API错误码设计-资料
  2. PTA 09-排序3 Insertion or Heap Sort (25分)
  3. 【bzoj4197】[Noi2015]寿司晚宴 分解质因数+状态压缩dp
  4. 【Luogu】P3376网络最大流模板(Dinic)
  5. Snmp的学习总结——Snmp的基本概念
  6. 常州模拟赛d3t2 灰狼呼唤着同胞
  7. LinkedList的构造函数有哪些
  8. testng自定义html报告,根据freemaker生成
  9. Autorelease对象什么时候释放?
  10. 洛谷P2676 超级书架