您的位置:首页 > 职场人生

(续)一道面试题引发的思考

2016-01-08 08:52 603 查看
先贴上面试题的运行结果。



why??? 经过无数次 Google 后,终于发现了问题

。Java 基础类型中,long 和 double 是 64 位长的。32 位架构 CPU 的算术逻辑单元(ALU)宽度是 32 位的,在处理大于 32 位操作时需要处理两次。所以对于long,double的赋值操作并不是原子操作。打印 4294967295就是因为读时高
32 位或低 32 位被其他写覆盖了导致的。解决方法就是在set1()、set2()、check()上加上synchronized。

通过这个题目,觉得自已对多线程中的原子性、可见性还不清楚,下一期将要集中学习下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: