Middle+
Was ist das Schlüsselwort volatile in Java und wie wird es verwendet?
sobes.tech KI
Antwort von AI
volatile garantiert die Sichtbarkeit von Änderungen an einer Variablen für alle Threads.
- Sichtbarkeitsgarantie: Wenn ein Thread eine
volatile-Variable ändert, garantieren andere Threads, diese Änderung zu sehen. Ohnevolatilekönnen Änderungen im Cache des Threads verbleiben, ohne mit dem Hauptspeicher synchronisiert zu werden. - Nicht atomar:
volatilegarantiert nicht die Atomizität von Operationen. Operationen wie Inkrement (i++) sind nicht atomar und können zu Race Conditions führen, selbst mitvolatile.
Verwendet für:
- Status-Flags: Wenn ein Thread ein Flag setzt, um anderen Threads einen Zustand mitzuteilen.
- Einfache Lese-/Schreiboperationen: Wenn Operationen an einer Variablen nur einmal von einem Thread geschrieben und mehrfach von anderen gelesen werden.
Beispiel für die Verwendung mit einem Flag:
// Beispiel für die Verwendung von volatile für ein Beendigungs-Flag
public class VolatileExample {
private volatile boolean terminated = false;
public void start() {
new Thread(() -> {
while (!terminated) {
// Thread-Arbeit
System.out.println("Thread läuft...");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Thread beendet.");
}).start();
}
public void stop() {
terminated = true; // Änderung an der volatile-Variablen
}
public static void main(String[] args) throws InterruptedException {
VolatileExample example = new VolatileExample();
example.start();
Thread.sleep(500);
example.stop();
}
}