Middle+
Čo je kľúčové slovo volatile v Jave a ako sa používa?
sobes.tech AI
Odpoveď od AI
volatile zabezpečuje viditeľnosť zmien premennej vo všetkých vláknach.
- Záruka viditeľnosti: Keď jedno vlákno zmení
volatilepremennú, ostatné vlákna garantovane uvidia túto zmenu. Bezvolatilemôžu zostať zmeny v cache vlákna, bez synchronizácie s hlavným pamäťou. - Neatomické:
volatilenezaručuje atomickosť operácií. Operácie ako inkrement (i++) nie sú atomické a môžu viesť ku stavu súťažného boja aj svolatile.
Používa sa na:
- Stavové vlajky: Keď jedno vlákno nastaví vlajku, aby informovalo iné vlákna o nejakom stave.
- Jednoduché operácie čítania/zápisu: Keď operácie s premennou zahŕňajú jednorazový zápis jedným vláknom a viacnásobné čítanie inými.
Príklad použitia s vlajkou:
// Príklad použitia volatile pre ukončovaciu vlajku
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Práca vlákna
System.out.println("Vlákno beží...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Vlákno ukončené.");
}).start();
}
public void stop() {
terminated = true; // Zmena v volatile premennej
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}