Ответ
Atomic классы в Java (например, AtomicInteger, AtomicBoolean) обеспечивают атомарность операций за счет использования низкоуровневых механизмов процессора, таких как compare-and-swap (CAS). Вместо блокировки (synchronized) они используют sun.misc.Unsafe или VarHandle (в новых версиях Java) для атомарных операций.
Пример с AtomicInteger:
AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet(); // атомарная операция
Как работает CAS:
- Читает текущее значение.
- Вычисляет новое значение.
- Пытается установить новое значение, если старое не изменилось.
- Если другой поток изменил значение, операция повторяется.
Преимущества:
- Нет блокировок → выше производительность.
- Гарантирует атомарность без
synchronized.
Недостатки:
- Возможен livelock при высокой конкуренции (постоянные переповторы CAS).