Implementacja addAndGet w klasie AtomicInteger
Przeglądałem kod źródłowy Java (Java 6) dlaaddAndGet
metoda wAtomicInteger
klasa.
Odpowiedni kod był następujący:
public final int addAndGet(int delta) {
for (;;) {
int current = get();
int next = current + delta;
if (compareAndSet(current, next))
return next;
}
}
Metoda compareAndSet wywołuje metodę natywną do wykonania przypisania. Są dwa główne pytania:
Jak pomaga nieskończona pętla?Jakie mogą być scenariusze, w których warunek „if (compareAndSet (current, next))” może zwrócić false? W takim przypadku kod może napotkać nieskończoną pętlę. Jeśli jest zagwarantowane, że compareAndSet zawsze zwróci „true”, to czy nie możemy całkowicie zrezygnować z tego sprawdzenia?Podobne wątpliwości dotycządecrementAndGet
, getAndDecrement
, getAndAdd
metody.