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