请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

1回答

翔仔 2019-09-27 00:47:26

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

0 回复 有任何疑惑可以回复我~
  • 假如此时shutdown=!shutdown,那么这个时候还是原子操作吗?
    回复 有任何疑惑可以回复我~ 2021-03-16 22:32:14
  • 翔仔 回复 mahsiaoko #2
    同学直接通过字节码看看,这个是非原子操作
    回复 有任何疑惑可以回复我~ 2021-03-18 00:08:32
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信