Зачем нужен Volatile

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

Ответ

volatile в Java (и Kotlin) гарантирует, что чтение/запись переменной будет происходить напрямую из основной памяти, минуя кэш потока. Это нужно для обеспечения видимости изменений между потоками.

Когда использовать:

  • Когда переменная изменяется одним потоком, а читается другими
  • Когда значение переменной не зависит от предыдущих состояний (нет compound-операций)

Пример:

@Volatile
var isRunning = true

fun stop() {
    isRunning = false // изменение видно сразу всем потокам
}

Ограничения:

  • Не гарантирует атомарность операций (например, i++)
  • Не заменяет synchronized или атомики для сложных сценариев