Для чего используются Atomic

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

Ответ

Atomic классы (например, AtomicInteger, AtomicBoolean) полезны, когда нужно обеспечить атомарные операции над примитивами в многопоточной среде без блокировок. Основные случаи:

  1. Счётчики – когда несколько потоков инкрементируют/декрементируют значение:
val counter = AtomicInteger(0)
fun increment() = counter.incrementAndGet()
  1. Флаги – для безопасного изменения boolean-значений:
val isRunning = AtomicBoolean(false)
fun stop() = isRunning.set(false)
  1. Одноразовые операции – например, ленивая инициализация:
private val initialized = AtomicBoolean(false)
fun initOnce() {
    if (initialized.compareAndSet(false, true)) {
        // инициализация
    }
}

Используйте Atomic вместо synchronized, когда нужны простые атомарные операции – это даёт лучшую производительность. Для сложных операций (например, проверка-действие) всё ещё может потребоваться synchronized или другие механизмы синхронизации.