Sobes.tech
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. Ohne volatile können Änderungen im Cache des Threads verbleiben, ohne mit dem Hauptspeicher synchronisiert zu werden.
  • Nicht atomar: volatile garantiert nicht die Atomizität von Operationen. Operationen wie Inkrement (i++) sind nicht atomar und können zu Race Conditions führen, selbst mit volatile.

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();
    }
}