Java Разработка | Spring Boot Backend & Architecture. Программирование на Джава для Developer. IT Собеседования, Алгоритмы и Coding задачи. Уроки и курсы для роста в Tech.
@bookjava
📌 Java: Как работает volatile и когда его использовать? 🔥 Что делает volatile? Ключевое слово volatile гарантирует, что переменная всегда будет читаться из памяти, а не из кэша потока. Это помогает избежать проблем, когда один поток изменяет переменную, но другой поток продолжает работать со старым значением из кэша. 🔄 Разбираем на примере: class SharedResource { volatile boolean flag = false; void changeFlag() { flag = true; } } class Worker extends Thread { SharedResource resource; Worker(SharedResource resource) { this.resource = resource; } public void run() { while (!resource.flag) { // Ждём, пока флаг изменится } System.out.println("Флаг изменился! Поток завершает работу."); } } public class VolatileExample { public static void main(String[] args) throws InterruptedException { SharedResource resource = new SharedResource(); Worker worker = new Worker(resource); worker.start(); Thread.sleep(1000); resource.changeFlag(); // Флаг изменится, и поток завершит цикл worker.join(); } } 🛑 Важные моменты: ✅ volatile не делает операции атомарными. Если вам нужна атомарность, используйте synchronized или Atomic классы. ✅ Он не предотвращает гонки данных, но гарантирует видимость изменений между потоками. ✅ Лучше всего подходит для флагов завершения потоков и подобных сценариев. 👉 @BookJava
Если у вас установлено приложение,
вы можете сразу перейти в канал