Является ли AtomicInteger эквивалентом volatile-переменной в Java?

«Является ли AtomicInteger эквивалентом volatile-переменной в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не является. AtomicInteger предоставляет атомарные операции, что выходит за рамки гарантий volatile.

Аспект volatile int AtomicInteger
Чтение/Запись Гарантирует видимость и порядок для одиночных операций. Гарантирует видимость и атомарность составных операций.
Пример операции counter = 5; (атомарно) counter.incrementAndGet(); (атомарно)
Сравнение if (counter == 5) { ... } counter.compareAndSet(5, 10); (атомарно)

Почему это важно: Операция i++ для volatile int не атомарна (читает, увеличивает, пишет). AtomicInteger.incrementAndGet() — атомарна.

Внутреннее устройство: AtomicInteger действительно использует volatile поле (private volatile int value;), но дополняет его атомарными операциями через Unsafe.compareAndSwapInt (CAS).