Sobes.tech
Назад к вопросам
Senior
5

Что такое volatile в Java, зачем нужно и как работает?

Компании, где спрашивали
01.tech

Ответ от нейросети

sobes.tech AI

В Java ключевое слово volatile используется для обозначения переменной, значение которой может изменяться несколькими потоками одновременно.

Зачем нужно:

  • Гарантирует, что чтение и запись переменной происходит напрямую из основной памяти, а не из кэша процессора или регистра.
  • Обеспечивает видимость изменений переменной между потоками без использования более тяжёлых механизмов синхронизации.

Как работает:

  • При записи в volatile переменную, новое значение сразу записывается в основную память.
  • При чтении из volatile переменной поток всегда получает актуальное значение из основной памяти.

Важно: volatile не обеспечивает атомарность операций (например, count++ не является атомарным), а только видимость изменений.

Пример:

public class Example {
    private volatile boolean flag = false;

    public void writer() {
        flag = true; // запись в volatile переменную
    }

    public void reader() {
        if (flag) { // чтение volatile переменной
            System.out.println("Flag is true");
        }
    }
}

В этом примере, если один поток вызовет writer(), а другой — reader(), то второй поток гарантированно увидит обновлённое значение flag.