![](/img/trans.png)
[英]Why do we need to compareAndSet when set is already atomic in Java?
[英]Java Atomic Variable set() vs compareAndSet()
我想知道原子類中set()和compareAndSet()之間的區別。 set()方法是否也確保原子過程? 例如這段代碼:
public class sampleAtomic{
private static AtomicLong id = new AtomicLong(0);
public void setWithSet(long newValue){
id.set(newValue);
}
public void setWithCompareAndSet(long newValue){
long oldVal;
do{
oldVal = id.get();
}
while(!id.compareAndGet(oldVal,newValue)
}
}
這兩種方法是否相同?
set
和compareAndSet
方法的行為不同:
set()方法是否也確保原子過程?
是。 它是原子的。 因為set
新值只涉及一個操作。 以下是set
方法的源代碼:
public final void set(long newValue) {
value = newValue;
}
正如您從下面的open jdk代碼中看到的那樣。
set
只是賦值,而compareAndSet
正在進行額外的操作以確保原子性。
設計任何原子操作需要考慮返回值(布爾值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.