Вопрос проверяет понимание различий между атомарными операциями и гарантиями видимости volatile.
volatile — гарантирует видимость изменений для всех потоков, но не поддерживает атомарные операции (например, i++).
Atomic-классы (AtomicInteger, AtomicBoolean) — обеспечивают атомарность операций (например, incrementAndGet()).
1. volatile:
Решает проблему видимости (изменения сразу видны другим потокам).
Не подходит для составных операций:
@Volatile var counter = 0
counter++ // Не атомарно! 2. Atomic-классы:
Атомарные операции через CAS (Compare-And-Swap):
val atomicCounter = AtomicInteger(0)
atomicCounter.incrementAndGet() // Атомарно Поддерживают сложные операции: updateAndGet, accumulateAndGet.
3. Когда что использовать:
volatile — для флагов (isRunning).
Atomic — для счетчиков и сложных изменений.
Вывод:Atomic надежнее для многопоточных операций, но volatile легче и быстрее для простых случаев.