关于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是不需要获取原先值,直接替换的。
022021-03-18
相似问题