Heim > Java > javaLernprogramm > Hauptteil

Wie kann ich einen Thread in Java sicher beenden, ohne „stop()' zu verwenden?

Patricia Arquette
Freigeben: 2024-11-23 19:18:16
Original
787 Leute haben es durchsucht

How to Safely Terminate a Thread in Java Without Using `stop()`?

So beenden Sie einen Thread, ohne stop() zu verwenden

Die Verwendung der stop()-Methode zum Beenden eines Threads kann zu unvorhersehbarem Verhalten führen. Dieser Artikel stellt einen alternativen Ansatz zur Thread-Beendigung mithilfe einer Unterbrechung vor.

Alternative zu stop()

Im Gegensatz zu stop() signalisiert eine Unterbrechung dem Thread, seine Ausführung ordnungsgemäß zu beenden. Die Unterbrechung wird durch die Methode Thread.interrupt() erreicht. Wenn ein Thread unterbrochen wird, wird eine InterruptedException ausgelöst.

Implementierungsbeispiel

Betrachten Sie den folgenden Code:

public class HelloWorld {

    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new Runnable() {

            public void run() {
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        Thread.sleep(5000);
                        System.out.println("Hello World!");
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });
        thread.start();
        System.out.println("press enter to quit");
        System.in.read();
        thread.interrupt();
    }
}
Nach dem Login kopieren

In diesem Beispiel Der Thread wird wie gewohnt erstellt und gestartet. Wenn der Benutzer die Eingabetaste drückt, unterbricht der Hauptthread den Arbeitsthread mithilfe von thread.interrupt(). Der Arbeitsthread behandelt die Unterbrechung, indem er eine InterruptedException auslöst und dann das Unterbrechungsflag löscht. Da der Thread innerhalb einer Schleife nach einer Unterbrechung sucht, beendet er seine Ausführung schließlich nach Abschluss der aktuellen Iteration.

Überlegungen

  • Eine Unterbrechung kann Methoden wie verursachen Sleep() und Wait(), um eine InterruptedException auszulösen.
  • Es wird empfohlen, mit Thread.currentThread().isInterrupted() auf Unterbrechungen zu prüfen. innerhalb einer Schleife, um sicherzustellen, dass der Thread mit der Unterbrechungsanforderung kooperiert.
  • In bestimmten Fällen kann es notwendig sein, das Interrupt-Flag für den aktuellen Thread mithilfe von Thread.currentThread().interrupt() innerhalb des Catch-Blocks zu setzen .

Das obige ist der detaillierte Inhalt vonWie kann ich einen Thread in Java sicher beenden, ohne „stop()' zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage