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