suchen
HeimJavajavaLernprogrammUnterbrechung 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正在执行
//...

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正在执行");
        }
    }
}

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;
    }
}

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();
        }
    }
}

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!

Stellungnahme
Dieser Artikel ist reproduziert unter:CSDN. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement?Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement?Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

See all articles

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)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools