Для чего нужна Volatile переменная

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

Ответ

Volatile гарантирует видимость изменений переменной для всех потоков. Без volatile JVM может кэшировать значение в регистре процессора, и изменения из одного потока могут быть не видны в другом.

Пример:

@Volatile
var isRunning = true

fun startWork() {
    thread {
        while (isRunning) { /* работа */ }
    }
}

fun stopWork() {
    isRunning = false
}

Без @Volatile поток может не увидеть изменение isRunning и зависнуть.

⚠️ Ограничение: Volatile не гарантирует атомарность составных операций (например, i++). Для этого используйте Atomic-классы или синхронизацию.