请稍等 ...
×

采纳答案成功!

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

Atomic中的AtomicInteger

public final int getAndAddInt(Object var1, long var2, int var4) {

        int var5;

        do {

            //如果没有线程的干扰var5=var2

            var5 = this.getIntVolatile(var1, var2);

        } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));


        return var5;

    }

为什么var2与var5的值不一样就能判断该线程被其他线程干扰到了?


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

1回答

zhusx 2018-08-29 17:36:44

var2是工作内存中的值,var5 是从主存中获取的值,如果不一样,说明有其他线程修改了var2在主存中的值。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕码人1088981 #1
    var5 = this.getIntVolatile(var1, var2);在这句话执行之后,如果被其他线程修改了主内存中的值呢?
    回复 有任何疑惑可以回复我~ 2018-08-29 20:38:10
  • 不知所措_Kevin 回复 提问者 慕码人1088981 #2
    所以while里进行了cas操作啊,cas是个原则操作,但是不一定成功啊。如果出现你说的情况,就返回false。继续循环
    回复 有任何疑惑可以回复我~ 2018-11-28 22:05:16
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号