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.

questionAnswers(1)

yourAnswerToTheQuestion