1 Star 0 Fork 1

程序员老陆/Java-Interview-Advanced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
68.md 894 Bytes
一键复制 编辑 原始数据 按行查看 历史
“zhaoguanglu 提交于 5年前 . 面试资料

68、32位Java虚拟机中的long和double变量写操作为何不是原子的?

原子性这块,特例,32位虚拟机里的long/double类型的变量的简单赋值写操作,不是原子的,long i = 30,double c = 45.0,在32位虚拟机里就不是原子的,因为long和double是64位的

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

如果多个线程同时并发的执行long i = 30,long是64位的,就会导致有的线程在修改i的高32位,有的线程在修改i的低32位,多线程并发给long类型的变量进行赋值操作,在32位的虚拟机下,是有问题的

就可能会导致多线程给long i = 30赋值之后,导致i的值不是30,可能是-3333344429,乱码一样的数字,就是因为高低32位赋值错了,就导致二进制数字转换为十进制之后是一个很奇怪的数字

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhao-guanglu/java-interview-advanced.git
git@gitee.com:zhao-guanglu/java-interview-advanced.git
zhao-guanglu
java-interview-advanced
Java-Interview-Advanced
master

搜索帮助