我正在經歷 java.util.concurrent.atomic.AtomicInteger中的源代碼,以瞭解如何在原子由級提供的原子操作來實現。例如 AtomicInteger.getAndIncrement()法源是如下如何在java.util.concurrent.atomic包中定義的類中實現原子性?
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
我不能夠理解爲寫一個循環裏面無限的操作順序的目的。它在Java內存模型(JMM)中有什麼特殊用途?請幫我找一個描述性的理解。提前致謝。
您好像忽略了那個循環中正在調用的方法,並且該方法的結果是打破循環的條件。谷歌「比較和交換」 –
這是一個'goto'的經典用例。在'goto'less語言中,我們使用無限循環。 –