天天看點

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;
    }