Назад к вопросам
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.