method 都要取用兩個參數 —— 在method 啟動時預期數據所具有的值,以及要把數據
所設定成的值。method只會在變量具有預期值的時候才會將它設定成新值。如果當前值
不等於預期值,該變量不會被重新賦值且method 返回false。如果當前值等於預期值會
返回boolean 的true 值,在這種情況下,值會被設定成新值。這個method 的weak 形式
基本上也是壹樣,但是少了壹項保證:如果method 返回的是false 值,該變量不會被變
動,但是這並不表示現有值不是預期值。這個method 不管初始值是否為預期值都可能
會無法更新該值。
不過JDK中的實現是壹樣的:
public final boolean compareAndSet(boolean expect, boolean update)
public boolean weakCompareAndSet(boolean expect, boolean update)
實現方式:
public boolean weakCompareAndSet(boolean expect, boolean update) {
int e = expect ? 1 : 0;
int u = update ? 1 : 0;
return unsafe.compareAndSwapInt(this, valueOffset, e, u);
}