java中CAS原理詳解


https://www.cnblogs.com/barrywxx/p/8487444.html

juc下的包

首先,聲明共享變量爲volatile;
然後,使用CAS的原子條件更新來實現線程之間的同步;
同時,配合以volatile的讀/寫和CAS所具有的volatile讀和寫的內存語義來實現線程之間的通信。
例如:
private volatile int value;

public final int get() {
        return value;
    }
    public final int incrementAndGet() {
    for (;;) {
        int current = get();
        int next = current + 1;
        if (compareAndSet(current, next))
            return next;
    }
}

 

AtomicReference:AtomicReference類來保證引用對象之間的原子性,你可以把多個變量放在一個對象裏來進行CAS操作
用法案例:https://blog.csdn.net/zxl1148377834/article/details/90079882
AtomicStampedReference它內部不僅維護了對象值,還維護了一個時間戳(我這裏把它稱爲時間戳,實際上它可以使任何一個整數,它使用整數來表示狀態值)。當AtomicStampedReference對應的數值被修改時,除了更新數據本身外,還必須要更新時間戳。當AtomicStampedReference設置對象值時,對象值以及時間戳都必須滿足期望值,寫入纔會成功。因此,即使對象值被反覆讀寫,寫回原值,只要時間戳發生變化,就能防止不恰當的寫入。
————————————————
版權聲明:本文爲CSDN博主「有個願望」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zxl1148377834/article/details/90079882

AtomicMarkableReference和AtomicStampedReference的作用一致,但是現在未深究

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章