Ответ
volatile в Java (и Kotlin) гарантирует, что чтение/запись переменной будет происходить напрямую из основной памяти, минуя кэш потока. Это нужно для обеспечения видимости изменений между потоками.
Когда использовать:
- Когда переменная изменяется одним потоком, а читается другими
- Когда значение переменной не зависит от предыдущих состояний (нет compound-операций)
Пример:
@Volatile
var isRunning = true
fun stop() {
isRunning = false // изменение видно сразу всем потокам
}
Ограничения:
- Не гарантирует атомарность операций (например,
i++) - Не заменяет
synchronizedили атомики для сложных сценариев