Middle+
Mi az a volatile kulcsszó a Java-ban, és hogyan használják?
sobes.tech MI
Válasz az MI-től
A volatile garantálja, hogy egy változó módosításai minden szál számára láthatóak legyenek.
- Láthatósági garancia: Amikor egy szál módosít egy
volatileváltozót, más szálak garantáltan látni fogják ezt a módosítást.volatilenélkül a módosítások a szál gyorsítótárában maradhatnak, anélkül, hogy szinkronizálva lennének a fő memóriával. - Nem atomikus: A
volatilenem garantálja az műveletek atomosságát. Az olyan műveletek, mint az inkrementálás (i++), nem atomikusak, és versenyhelyzeteket okozhatnak mégvolatile-tel is.
Használatra:
- Állapot zászlók: Amikor egy szál zászlót állít be, hogy más szálaknak jelezze egy állapotot.
- Egyszerű olvasási/írási műveletek: Amikor a változón végzett műveletek egyetlen írást tartalmaznak egy szál által, és több olvasást más szálak által.
Példa zászlóval való használatra:
// Példa a volatile használatára egy befejezési zászlóhoz
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Szál munka
System.out.println("A szál fut...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("A szál befejeződött.");
}).start();
}
public void stop() {
terminated = true; // változás a volatile változóban
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}