Что такое
volatile в Java и в каких случаях его следует использовать?Ответ ⬇️
Ключевое слово volatile в Java используется для указания, что значение переменной может быть изменено несколькими потоками. Когда переменная объявляется как volatile, изменения, сделанные одним потоком, становятся видимыми для других потоков немедленно, избегая кеширования значения в локальной памяти потока. Это гарантирует "свежесть" значения, что важно в многопоточных программах для обеспечения корректного взаимодействия между потоками.
Однако volatile не заменяет блокировку (synchronized) и не обеспечивает атомарности операций. Его рекомендуется использовать для переменных, доступ к которым происходит через чтение/запись, но не требует сложной синхронизации, например, для флагов или индикаторов состояния.
Пример использования ⚙️
public class VolatileExample {
private volatile boolean flag = true;
public void run() {
new Thread(() -> {
while (flag) {
System.out.println("Работаем...");
}
System.out.println("Остановка");
}).start();
try {
Thread.sleep(1000);
flag = false; // изменение станет сразу видимым для первого потока
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
public static void main(String[] args) {
new VolatileExample().run();
}
}
Java Learning 👩💻