Когда нужен Volatile

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

Ответ

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

Пример:

@Volatile
var isRunning = true

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

fun stopWork() {
    isRunning = false
}

Без @Volatile поток может закешировать значение isRunning и не увидеть его изменение. Однако для сложных операций (например, инкремент) лучше использовать Atomic* или синхронизацию.