Назад к вопросам
Middle+
102
questionbank
Что такое ключевое слово volatile в Java и как оно используется?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
volatile гарантирует видимость изменений переменной для всех потоков.
- Гарантия видимости: Когда один поток изменяет
volatileпеременную, другие потоки гарантированно увидят это изменение. Безvolatileизменения могут оставаться в кеше потока, не синхронизируясь с основной памятью. - Не атомарность:
volatileне гарантирует атомарность операций. Операции типа инкремента (i++) не являются атомарными и могут привести к состоянию гонки даже сvolatile.
Используется для:
- Флагов состояния: Когда один поток устанавливает флаг, чтобы сообщить другим потокам о каком-то состоянии.
- Одиночных операций записи/чтения: Когда операции с переменной заключаются в однократную запись одним потоком и многократное чтение другими.
Пример использования с флагом:
// Пример использования volatile для флага завершения
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Работа потока
System.out.println("Поток работает...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Поток завершен.");
}).start();
}
public void stop() {
terminated = true; // Изменение volatile переменной
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}