Sobes.tech
Middle

Was ist der Unterschied zwischen den Methoden interrupted() und isInterrupted() in Java?

sobes.tech KI

Antwort von AI

isInterrupted() überprüft, ob der aktuelle Thread das Interrupt-Flag gesetzt hat, ohne es zurückzusetzen.

interrupted() überprüft, ob der aktuelle Thread das Interrupt-Flag gesetzt hat, und setzt es zurück nach der Überprüfung, falls es gesetzt war. Diese Methode ist static.

Beispiel:

// Thread erstellen
Thread t = new Thread(() -> {
    while (!Thread.currentThread().isInterrupted()) {
        // Nützliche Arbeit ausführen
    }
    System.out.println("Thread unterbrochen.");
});

// Thread starten
t.start();

// Thread unterbrechen
t.interrupt();

// Zustand des Flags nach interrupt() mit isInterrupted() prüfen
System.out.println("isInterrupted() nach interrupt(): " + t.isInterrupted()); // Sollte true sein

try {
    // Warten, bis der Thread beendet ist (in diesem Fall schnell)
    t.join();
} catch (InterruptedException e) {
    // Interrupt-Flag wiederherstellen, falls join() unterbrochen wurde
    Thread.currentThread().interrupt();
}

// Zustand des Flags nach interrupt() mit interrupted() prüfen (aus einem anderen Thread!)
// Achtung: interrupted() aus einem anderen Thread aufzurufen, macht keinen Sinn,
// da interrupted() mit dem Flag des aufrufenden Threads arbeitet.
// Um die Funktion von interrupted() zu demonstrieren, muss es im unterbrochenen Thread selbst aufgerufen werden.

// Beispiel: Aufruf von interrupted() in einem anderen Thread (nicht im Thread t)
System.out.println("interrupted() im aktuellen Thread: " + Thread.interrupted()); // Sollte false sein (wenn der aktuelle Thread nicht unterbrochen wurde)

Wesentlicher Unterschied:

Methode Wird das Interrupt-Flag zurückgesetzt? Methodentyp
isInterrupted() Nein Instanz
interrupted() Ja Statisch