За счет чего Atomic классы становятся атомарными

«За счет чего Atomic классы становятся атомарными» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Atomic классы в Java (например, AtomicInteger, AtomicBoolean) обеспечивают атомарность операций за счет использования низкоуровневых механизмов процессора, таких как compare-and-swap (CAS). Вместо блокировки (synchronized) они используют sun.misc.Unsafe или VarHandle (в новых версиях Java) для атомарных операций.

Пример с AtomicInteger:

AtomicInteger counter = new AtomicInteger(0);
counter.incrementAndGet(); // атомарная операция

Как работает CAS:

  1. Читает текущее значение.
  2. Вычисляет новое значение.
  3. Пытается установить новое значение, если старое не изменилось.
  4. Если другой поток изменил значение, операция повторяется.

Преимущества:

  • Нет блокировок → выше производительность.
  • Гарантирует атомарность без synchronized.

Недостатки:

  • Возможен livelock при высокой конкуренции (постоянные переповторы CAS).