Atomic中的AtomicInteger

来源:3-1 线程安全性-原子性-atomic-1

慕码人1088981

2018-08-29

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的值不一样就能判断该线程被其他线程干扰到了?


写回答

1回答

zhusx

2018-08-29

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

0
2
不知所措_Kevin
回复
慕码人1088981
所以while里进行了cas操作啊,cas是个原则操作,但是不一定成功啊。如果出现你说的情况,就返回false。继续循环
2018-11-28
共2条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程