Middle+
Какво е ключовата дума volatile в Java и как се използва?
sobes.tech AI
Отговор от 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();
}
}