Ответ
AtomicInteger предоставляет потокобезопасные атомарные операции над целочисленным значением, используя низкоуровневые механизмы процессора (чаще всего CAS — Compare-And-Swap), что обычно эффективнее явной синхронизации с помощью synchronized.
Ключевые отличия и преимущества:
- Integer — неизменяемый (immutable) класс. Для изменения значения
Integerв нескольких потоках требуется внешняя синхронизация, что сложнее и может стать узким местом. - AtomicInteger — предоставляет методы для атомарных операций чтения-изменения-записи, такие как
incrementAndGet(),addAndGet(),compareAndSet().
Пример использования AtomicInteger как счетчика:
import java.util.concurrent.atomic.AtomicInteger;
public class CounterExample {
private AtomicInteger threadSafeCounter = new AtomicInteger(0);
public void increment() {
// Операция атомарна и не требует synchronized
threadSafeCounter.incrementAndGet();
}
public int getCount() {
return threadSafeCounter.get();
}
}
Практическое применение: AtomicInteger идеально подходит для высокопроизводительных счетчиков, генераторов ID или флагов состояния в многопоточной среде, где важна производительность без блокировок.