Heim >Java >javaLernprogramm >Ist Thread-Unterbrechung eine bessere Alternative zur veralteten Methode „stop()' in Java?

Ist Thread-Unterbrechung eine bessere Alternative zur veralteten Methode „stop()' in Java?

Barbara Streisand
Barbara StreisandOriginal
2024-11-30 12:06:18530Durchsuche

Is Thread Interruption a Better Alternative to the Deprecated `stop()` Method in Java?

Thread-Unterbrechung als Alternative zu Stop()

Von der Methode „stop()“ wird in Java aufgrund ihres Potenzials generell abgeraten unerwartete Nebenwirkungen verursachen. Ein alternativer Ansatz zum Beenden eines Threads ist die Unterbrechung.

Thread-Unterbrechung

Das Unterbrechen eines Threads signalisiert ihm, dass er seine Ausführung ordnungsgemäß stoppen sollte. Um einen Thread zu unterbrechen, rufen Sie seine Methode „interrupt()“ auf. Wenn sich der Thread gut verhält und Unterbrechungen ordnungsgemäß verarbeitet, versucht er, seine aktuelle Aufgabe zu beenden, bevor er beendet wird.

Beispielimplementierung

Beachten Sie den folgenden Code:

Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                Thread.sleep(5000);
                System.out.println("Hello World!");
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Thread interrupted");
            }
        }
    }
});

In diesem Code überprüft der Thread seinen Unterbrechungsstatus innerhalb der Schleife. Bei einer Unterbrechung wird eine „InterruptedException“ ausgelöst, die behandelt wird und den Unterbrechungsstatus des Threads erneut festlegt. Der Thread verlässt dann die Schleife und wird beendet.

Überlegungen

  • Eine Unterbrechung führt dazu, dass die Methoden „sleep()“ und „wait()“ eine „InterruptedException“ auslösen. sofort.
  • Es ist kein separates boolesches Flag zur Anzeige erforderlich Beendigung.
  • Threads sollten zusammenarbeiten, indem sie den Unterbrechungsstatus überprüfen und „InterruptedExceptions“ abfangen.
  • Das Setzen des Interrupt-Flags für den aktuellen Thread im Catch-Block ist normalerweise unnötig, es sei denn, andere Threads müssen das wissen die Unterbrechung ist aufgetreten.

Unterscheidung von „Thread#isAlive()“ und Thread#interrupted()

  • "Thread#isAlive()" prüft, ob der Thread noch läuft, nicht, ob er unterbrochen wurde.
  • "Thread#interrupted( )“ prüft, ob der Thread unterbrochen wurde und löscht das Interrupt-Flag. Diese Methode sollte nicht verwendet werden, um den unterbrochenen Status zu testen, ohne das Flag zu löschen, da dies zu unerwarteten Ereignissen führen kann Verhalten.

Das obige ist der detaillierte Inhalt vonIst Thread-Unterbrechung eine bessere Alternative zur veralteten Methode „stop()' in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn