Реализация addAndGet в классе AtomicInteger

Я проходил через Java (Java 6) исходный код дляaddAndGet метод вAtomicInteger учебный класс.

Соответствующий код был следующим:

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 всегда будет возвращать "правда"тогда мы можем вообще не покончить с этой проверкой?

Подобные сомнения с,,decrementAndGetgetAndDecrementgetAndAdd методы также.

Ответы на вопрос(1)

Ваш ответ на вопрос