Middle+
Co je klíčové slovo volatile v Java a jak se používá?
sobes.tech AI
Odpověď od AI
volatile zajišťuje viditelnost změn proměnné pro všechny vlákna.
- Záruka viditelnosti: Když jedno vlákno změní
volatileproměnnou, ostatní vlákna garantovaně uvidí tuto změnu. Bezvolatilemohou změny zůstat v cache vlákna, aniž by se synchronizovaly s hlavní pamětí. - Neatomické:
volatilenezaručuje atomárnost operací. Operace jako inkrement (i++) nejsou atomické a mohou vést ke stavu závodu i svolatile.
Používá se pro:
- Stavové vlajky: Když jedno vlákno nastaví vlajku, aby ostatním vlákům oznámilo nějaký stav.
- Jednoduché operace čtení/zápisu: Když operace s proměnnou spočívají v jednorázovém zápisu jedním vláknem a vícenásobném čtení jinými.
Příklad použití s vlajkou:
// Příklad použití volatile pro ukončovací vlajku
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Práce vlákna
System.out.println("Vlákno běží...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Vlákno ukončeno.");
}).start();
}
public void stop() {
terminated = true; // Změna ve volatile proměnné
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}