Heim Java javaLernprogramm Unterbrechung und Beendigung von Threads in Java

Unterbrechung und Beendigung von Threads in Java

Nov 27, 2019 pm 02:15 PM
java 中断 线程 终止

Unterbrechung und Beendigung von Threads in Java

Unterbrechung und Beendigung von Threads

1. Die Funktionen von interrupt(), isInterrupted() und interrupted()

Interrupt ist ein Identifikationsbit eines Threads. Es zeigt an, ob ein laufender Thread von anderen Threads unterbrochen wurde, indem er die Methode interrupt() des Threads aufruft Unabhängig davon, ob es unterbrochen ist, kann der Thread auch das Interrupt-Flag-Bit des aktuellen Threads zurücksetzen, indem er die statische Methode isInterrupted() von Thread aufruft. interrupted()

Empfohlene verwandte Video-Tutorials:

Java-Online-Video

Hinweis: Denken Sie nicht, dass der Thread stoppt, wenn die Interrupt()-Methode des Threads aufgerufen wird , es hat einfach ein Zeichen gesetzt.

lautet wie folgt:

public class InterruptThread extends Thread{
    @Override
    public void run() {
        //一个死循环
        while (true){
            System.out.println("InterruptThread正在执行");
        }
    }
}

public static void main(String[] args) throws InterruptedException {
    InterruptThread interruptThread = new InterruptThread();
    interruptThread.start();
    interruptThread.interrupt();//调用线程的interrupt()
    System.out.println("interruptThread是否被中断,interrupt  = " + interruptThread.isInterrupted());
    //此时isInterrupted()方法返回true
}

输出结果:
interruptThread是否被中断,interrupt  = true
InterruptThread正在执行
InterruptThread正在执行
InterruptThread正在执行
//...
Nach dem Login kopieren

Sie können sehen, dass beim Aufrufen der interrupt()-Methode des Threads der Aufruf der isInterrupted()-Methode true zurückgibt, der Thread jedoch Mach trotzdem weiter. Wie können wir also die Ausführung eines Threads beenden?

2. Beenden Sie die Ausführung des Threads

Ein Thread wird automatisch beendet, nachdem die Ausführungsmethode normal ausgeführt wurde vorzeitig beenden; In diesen beiden Fällen können wir den laufenden Thread auch auf die folgenden drei Arten sicher beenden:

2.1 Verwenden des Interrupt-Flag-Bits

Die zuvor erwähnte Unterbrechung Die Operation kann verwendet werden, um die Thread-Aufgabe wie folgt abzubrechen:

public class InterruptThread extends Thread{
    @Override
    public void run() {
        while (!isInterrupted()){//利用中断标记位
            System.out.println("InterruptThread正在执行");
        }
    }
}
Nach dem Login kopieren

Wenn der InterruptThread-Thread nicht ausgeführt werden muss, rufen Sie InterruptThread.interrupt() auf, sodass isInterrupted() true zurückgibt. Der Thread kann die Schleife verlassen und die normale Ausführung wird automatisch beendet.

2.2. Verwenden Sie eine boolesche Variable

Verwenden Sie eine boolesche Variable auf die gleiche Weise wie bei der obigen Methode:

public class InterruptThread extends Thread{
    
    private volatile boolean isCancel;

    @Override
    public void run() {
        while (!isCancel){//利用boolean变量
            System.out.println("InterruptThread正在执行");
        }
    }

    public void cancel(){
        isCancel = true;
    }
}
Nach dem Login kopieren

Wenn vorhanden Es ist nicht erforderlich, den InterruptThread-Thread auszuführen. Durch Aufrufen von InterruptThread.cancel() kann der Thread die Schleife verlassen und nach der normalen Ausführung automatisch enden. Beachten Sie dabei, dass die boolesche Variable mit volatile geändert werden muss, um die Sichtbarkeit sicherzustellen die Erinnerung.

2.3. Reagieren auf InterruptedException

Wenn ein Thread durch den Aufruf von interrupt() unterbrochen wird, der Thread blockiert ist, eine begrenzte Zeit wartet oder auf unbestimmte Zeit wartet, Dann wird eine InterruptedException ausgelöst, wodurch der Thread vorzeitig beendet wird. Wenn Sie beispielsweise die Thread.sleep()-Methode aufrufen, werden Sie normalerweise aufgefordert, eine InterruptedException wie folgt abzufangen:

public class InterruptThread extends Thread{
    @Override
    public void run() {
        try{
            while (true){
                Thread.sleep(100);//Thread.sleep会抛出InterruptedException
                System.out.println("InterruptThread正在执行");
            }
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
}
Nach dem Login kopieren

Wenn es eine gibt Es ist nicht erforderlich, den InterruptThread-Thread auszuführen. Durch Aufrufen von InterruptThread.interrupt(), damit Thread.sleep() eine InterruptedException auslöst, kann der Thread die Schleife verlassen und vorzeitig enden. Bevor eine InterruptedException ausgelöst wird, setzt die JVM das Interrupt-Flag-Bit zurück und die isInterrupted()-Methode des aufrufenden Threads gibt false zurück.

Empfohlene Artikel und Tutorials zum Thema Java:

Einführung in die Java-Programmierung

Das obige ist der detaillierte Inhalt vonUnterbrechung und Beendigung von Threads in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles