Sobes.tech
Back to questions
Senior
9

Что получаем и чем жертвуем при использовании volatile?

Companies where asked
01.tech

Answer from AI

sobes.tech AI

В Java ключевое слово volatile гарантирует, что изменения переменной будут видны всем потокам сразу, то есть чтение и запись переменной не будут кэшироваться локально в потоках. Это обеспечивает видимость изменений и предотвращает некоторые проблемы с кэшированием и переупорядочиванием инструкций.

Что получаем:

  • Гарантированную видимость изменений переменной между потоками.
  • Запрет на переупорядочивание операций чтения/записи с этой переменной.

Чем жертвуем:

  • Производительностью, так как доступ к volatile-переменным может быть медленнее из-за необходимости синхронизации с основной памятью.
  • volatile не обеспечивает атомарность сложных операций (например, инкремент), поэтому для таких случаев нужна дополнительная синхронизация.

Пример:

volatile boolean flag = false;

// Поток 1
flag = true;

// Поток 2
if (flag) {
    // гарантированно увидит обновление flag
}