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的作用一致,但是現在未深究