Ответ
Volatile нужен, когда переменная используется несколькими потоками, и важно, чтобы изменения были сразу видны всем потокам. Он гарантирует видимость изменений, но не атомарность операций.
Пример:
@Volatile
var isRunning = true
fun startWork() {
thread {
while (isRunning) { /* работа */ }
}
}
fun stopWork() {
isRunning = false
}
Без @Volatile поток может закешировать значение isRunning и не увидеть его изменение. Однако для сложных операций (например, инкремент) лучше использовать Atomic* или синхронизацию.