关于boolean值被volatile修饰时是原子操作问题?

来源:9-5 jmm的内存可见性

jannik

2019-09-26

对于flag=false改成flag=true不也是组合操作嘛?即先取出flag,然后修改为true,然后在保存进内存。觉得跟i++是一个道理啊?为何老师说这个boolean就是原子操作了?

写回答

1回答

翔仔

2019-09-27

同学好,这个不是组合吧,是直接赋值了,而且volatile的作用是让工作内存的数据失效,读取的时候是从主内存读取。flag=true本身就是一个赋值操作,因此是原子的,而i++是首先获取变量i的值,对它里面的值+1,再覆盖原先的值,因此是非原子的;flag=true是不需要获取原先值,直接替换的。

0
2
翔仔
回复
mahsiaoko
同学直接通过字节码看看,这个是非原子操作
2021-03-18
共2条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程