Объясняет низкоуровневый механизм атомарных операций.
CAS — атомарная инструкция процессора, которая обновляет значение в памяти, только если текущее значение совпадает с ожидаемым (expectedValue). При несовпадении операция повторяется. Это основа Atomic-классов.
Алгоритм CAS:
Прочитать текущее значение A из памяти.
Вычислить новое значение B = A + 1.
Выполнить CAS: если значение в памяти == A, заменить на B. Иначе — повторить.
Реализация в AtomicInteger:
public final int incrementAndGet() {
int prev, next;
do {
prev = get(); // Текущее значение
next = prev + 1; // Новое значение
} while (!compareAndSet(prev, next)); // CAS-цикл
return next;
}Аппаратная поддержка:
В x86: инструкция CMPXCHG.
Проблемы CAS:
ABA-проблема: Значение меняется с A → B → A, но поток не видит изменений. Решение — AtomicStampedReference.
Циклы при высокой конкуренции: Многократные повторы снижают производительность.
Вывод: CAS — эффективная альтернатива блокировкам для простых операций.