天天看点

CAS使用理解

CAS

比较并替换,在synchronized底层实现用的非常多,可以保证多线程环境下对一个变量修改的原子性。

原理

包含3个值,当前内存值(V)、预期原来的值(E)、期待更新的值(N)

yes

no

V==E?

更新变量V并设置值为N

返回true

不更新变量V

code

public final int getAndAddInt(Object var1, long var2, int var4) {
        int var5;
        do {
            // 底层取到的值
            var5 = this.getIntVolatile(var1, var2);
        } while(
            // 判断当前对象的值是否等于底层的值,相等时才执行对应的操作,才最终返回结果
            // 在这里也就是 【var2 == var5 ? (var5 + var4) : false】
            !this.compareAndSwapInt(var1, var2, var5, var5 + var4)
        );
        return var5;
    }