Ответ
Atomic-типы — это общее название для классов, предоставляющих атомарные (неделимые) операции над переменными в конкурентных сценариях. В Java они представлены пакетом java.util.concurrent.atomic. Их основная цель — обеспечить потокобезопасность для отдельных операций без использования блокировок, что решает проблемы состояния гонки (race condition).
Принцип работы: В основе лежит низкоуровневая операция процессора CAS (Compare-And-Swap), которая атомарно сравнивает текущее значение переменной с ожидаемым и, если они совпадают, устанавливает новое значение.
Ключевые Atomic-классы в Java:
- Для чисел:
AtomicInteger,AtomicLong. - Для ссылок на объекты:
AtomicReference<T>. - Для массивов:
AtomicIntegerArray,AtomicReferenceArray. - Для обновляемых полей:
AtomicIntegerFieldUpdater(позволяет сделать атомарным существующееvolatileполе).
Пример (AtomicReference):
import java.util.concurrent.atomic.AtomicReference;
class Config {
private AtomicReference<String> currentMode = new AtomicReference<>("default");
public void switchToSafeMode() {
// Атомарно меняем режим только если текущий — "default"
currentMode.compareAndSet("default", "safe");
}
public String getMode() {
return currentMode.get();
}
}
Когда использовать:
- Для счетчиков, флагов, простых состояний в высоконагруженных многопоточных приложениях.
- Когда нужно избежать накладных расходов на блокировки (
synchronized,Lock).
Когда не использовать: Для сложных операций, затрагивающих несколько независимых переменных — в таких случаях требуется явная синхронизация.