我想了解getAndIncrement中的current
是如何更新的,下面是這段代碼。Java AtomicInteger getAndIncrement()和compareAndSet
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
我明白compareAndSet將比較電流值是否與存儲在寄存器中的值,如果是相同的,然後更新接下來在寄存器中的值。
我不明白的是爲什麼不返回next
而不是current
。
當進入循環時,current
被設置爲一個int並且current
不是一個參考值,所以如果電流被初始化爲5,那麼當它返回電流時,它是否也應該是5?或者當它返回current
時,current
將再次調用get()
以從寄存器中獲取更新值?
因爲您調用['getAndIncrement()'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#getAndIncrement--),它有點類似於postincrement操作符('i ++')。對於你描述的行爲,有['incrementAndGet()'](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html#incrementAndGet--) ,類似於預增量運算符('++ i')。 – Turing85
我所問的是「當前」如何更新爲原語,我只看到「當前」指的是更新的值? –
我不完全理解你的評論。 Java是按值傳遞的,所以'current'永遠不會被改變,因此在你給出的例子中'5'將被返回。這回答了你的問題了嗎? – Turing85