Heim > Java > javaLernprogramm > Hauptteil

Was ist ein Thread-Interrupt? Detaillierte Einführung in die Java-Thread-Unterbrechung (mit Beispielen)

不言
Freigeben: 2018-09-27 17:54:50
nach vorne
3063 Leute haben es durchsucht

In diesem Artikel erfahren Sie, was eine Thread-Unterbrechung ist. Die ausführliche Einführung in die Java-Thread-Unterbrechung hat einen gewissen Referenzwert. Ich hoffe, dass sie für Sie hilfreich ist.

Jeder sollte mit dem folgenden fehlerhaften Code vertraut sein, um eine Thread-Interrupt-Ausnahme abzufangen oder auszulösen, das heißt, jemand stürmt herein und weckt Sie, während Sie schlafen.

try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
Nach dem Login kopieren

Nachdem der Thread zu diesem Zeitpunkt unterbrochen wurde, wird der Code weiter ausgeführt oder eine Ausnahme ausgelöst, um den Vorgang zu beenden. Dies ist nicht die Funktion zum Unterbrechen des Threads, die wir benötigen.

Was genau ist ein Thread-Interrupt?

Thread-Unterbrechung bedeutet, dass der Thread während seiner Ausführung von anderen Threads unterbrochen wird. Der größte Unterschied zwischen ihm und Stop besteht darin, dass Stop das Beenden des Threads durch das System erzwingt, während Thread-Unterbrechung ein Unterbrechungssignal an sendet Wenn der Ziel-Thread das Thread-Interrupt-Signal nicht empfängt und der Thread nicht beendet wird, wird er vom Ziel-Thread bestimmt.

Werfen wir einen Blick auf die drei wichtigsten Methoden zur Thread-Unterbrechung. Sie stammen alle aus der Thread-Klasse!

1. java.lang.Thread#interrupt

Unterbrechen Sie den Ziel-Thread, senden Sie ein Interrupt-Signal an den Ziel-Thread und der Thread wird als unterbrochen markiert.

2. java.lang.Thread#isInterrupted()

Bestimmt, ob der Zielthread unterbrochen ist, und die Unterbrechungsmarkierung wird nicht gelöscht.

3. java.lang.Thread#interrupted

Um festzustellen, ob der Zielthread unterbrochen wurde, wird die Unterbrechungsmarkierung gelöscht.

Thread-Interrupt in Aktion

Lassen Sie uns anhand eines Beispiels demonstrieren, wie Thread-Interrupt verwendet wird!

Beispiel 1 (Unterbrechung fehlgeschlagen)

/**
 * 微信公众号:Java技术栈
 */
private static void test1() {
    Thread thread = new Thread(() -> {
        while (true) {
            Thread.yield();
        }
    });
    thread.start();
    thread.interrupt();
}
Nach dem Login kopieren

Wird der Thread in Beispiel 1 unterbrochen? Antwort: Nein, denn obwohl ein Interrupt-Signal an den Thread gesendet wird, gibt es im Programm keine Logik, um auf das Interrupt-Signal zu reagieren, sodass das Programm in keiner Weise reagiert.

Beispiel 2: (Unterbrechung erfolgreich)

/**
 * 微信公众号:Java技术栈
 */
private static void test2() {
    Thread thread = new Thread(() -> {
        while (true) {
            Thread.yield();

            // 响应中断
            if (Thread.currentThread().isInterrupted()) {
                System.out.println("Java技术栈线程被中断,程序退出。");
                return;
            }
        }
    });
    thread.start();
    thread.interrupt();
}
Nach dem Login kopieren

Wir haben in Beispiel 2 Logik hinzugefügt, um auf Interrupts zu reagieren. Das Programm kehrt zurück und wird beendet, nachdem es das Interrupt-Signal empfangen und ausgedruckt hat die Informationen.

Beispiel 3 (Unterbrechung fehlgeschlagen)

/**
 * 微信公众号:Java技术栈
 */
private static void test3() throws InterruptedException {
    Thread thread = new Thread(() -> {
        while (true) {
            // 响应中断
            if (Thread.currentThread().isInterrupted()) {
                System.out.println("Java技术栈线程被中断,程序退出。");
                return;
            }

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                System.out.println("Java技术栈线程休眠被中断,程序退出。");
            }
        }
    });
    thread.start();
    Thread.sleep(2000);
    thread.interrupt();
}
Nach dem Login kopieren

Beispiel 3 Sleep()-Methode wurde unterbrochen und ausgegeben Java技术栈线程休眠被中断,程序退出。 Das Programm läuft weiter... Warum?

Sehen Sie sich den Quellcode von Sleep an:

Was ist ein Thread-Interrupt? Detaillierte Einführung in die Java-Thread-Unterbrechung (mit Beispielen)

Es ist ersichtlich, dass die Methode sleep() die Interrupt-Markierung löscht Nach der Unterbrechung läuft die Schleife also weiter. .

Beispiel 4 (Unterbrechung erfolgreich)

/**
 * 微信公众号:Java技术栈
 */
private static void test4() throws InterruptedException {
    Thread thread = new Thread(() -> {
        while (true) {
            // 响应中断
            if (Thread.currentThread().isInterrupted()) {
                System.out.println("Java技术栈线程被中断,程序退出。");
                return;
            }

            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                System.out.println("Java技术栈线程休眠被中断,程序退出。");
                Thread.currentThread().interrupt();
            }
        }
    });
    thread.start();
    Thread.sleep(2000);
    thread.interrupt();
}
Nach dem Login kopieren

Beispiel 4 gibt alle Informationen aus und wird normal beendet. Unterbrechen Sie einfach den aktuellen Status manuell erneut, nachdem die Methode sleep() unterbrochen wurde und die Markierung wird gelöscht. Anschließend empfängt das Programm das Interrupt-Signal und kehrt zum Beenden zurück.

Durch die oben genannten 4 Interrupt-Beispiele glaube ich, dass Sie ein umfassendes Verständnis des Konzepts von Java-Thread-Interrupts haben.

Das obige ist der detaillierte Inhalt vonWas ist ein Thread-Interrupt? Detaillierte Einführung in die Java-Thread-Unterbrechung (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!