Реализация 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 всегда будет возвращать "правда"тогда мы можем вообще не покончить с этой проверкой?Подобные сомнения с,,decrementAndGet
getAndDecrement
getAndAdd
методы также.