我正在通過AtomicInteger
類中addAndGet
方法的Java(Java 6)源代碼。AtomicInteger類中的addAndGet的實現
相應的代碼如下:
public final int addAndGet(int delta) {
for (;;) {
int current = get();
int next = current + delta;
if (compareAndSet(current, next))
return next;
}
}
的compareAndSet方法調用來進行分配本機方法。 主要有兩個問題:
- 無限循環如何提供幫助?
- 什麼情況下,「if (compareAndSet(current,next))」條件可能返回一個錯誤?在 這種情況下,代碼可能會遇到無限循環。如果是 保證compareAndSet總是會返回一個「true」,那麼我們是否可以完全不用這個檢查呢?
類似的質疑都與decrementAndGet
,getAndDecrement
,getAndAdd
方法爲好。