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 |