Heim Java javaLernprogramm Was ist Thread-Interrupt in Java? Welche Probleme verursacht eine Java-Thread-Unterbrechung?

Was ist Thread-Interrupt in Java? Welche Probleme verursacht eine Java-Thread-Unterbrechung?

Sep 20, 2018 pm 03:00 PM
java线程

Der Inhalt dieses Artikels befasst sich mit der Frage, was eine Thread-Unterbrechung in Java ist. Welche Probleme verursacht eine Java-Thread-Unterbrechung? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Was ist ein Thread-Interrupt?

Tatsächlich gibt es in unserem Java-Programm mehr als einen Ausführungsthread. Erst wenn alle Threads abgeschlossen sind, gilt das Java-Programm als abgeschlossen. Die offizielle Beschreibung lautet wie folgt: Dieses Java-Programm kann beendet werden, wenn die Ausführung aller Nicht-Daemon-Threads beendet ist oder wenn einer der Threads die Methode System.exit() aufruft.

Anwendungsszenarien für Thread-Unterbrechungen

Lassen Sie uns zunächst ein Beispiel nennen. Wir laden beispielsweise einen Blockbuster von mehr als 500 Millionen herunter und klicken, um den Download zu starten Zum Starten eines Threads. Allerdings ist unsere Internetgeschwindigkeit derzeit nicht sehr hoch. Als junger Mann kann ich nicht länger warten Unser erster Vorgang besteht zu diesem Zeitpunkt darin, den Download zu beenden. Dieser Vorgang zum Herunterladen von Dateien ist tatsächlich näher am Programm. Zu diesem Zeitpunkt müssen wir den Thread unterbrechen.

Lassen Sie uns als nächstes den Download-Code schreiben und sehen, wie man einen Thread unterbricht. Hier habe ich bereits angenommen, dass Sie das Erstellen eines Threads beherrschen Rufen Sie zuerst die Systemzeit ab und betreten Sie dann die Schleife, um jedes Mal die Systemzeit abzurufen. Wenn die Zeit 10 Sekunden überschreitet, wird der Thread unterbrochen und der Download gestoppt:

public void run() {

       int number = 0;

       // 记录程序开始的时间
       Long start = System.currentTimeMillis();

       while (true) {

           // 每次执行一次结束的时间
           Long end = System.currentTimeMillis();

           // 获取时间差
           Long interval = end - start;

           // 如果时间超过了10秒,那么我们就结束下载
           if (interval >= 10000) {
               // 中断线程
               interrupted();
               System.err.println("太慢了,我不下了");
               return;
           } else if (number >= 500) {
               System.out.println("文件下载完成");
               // 中断线程
               interrupted();
               return;
           }

           number++;
           System.out.println("已下载" + number + "M");

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

So unterbrechen Sie einen Thread

Die Thread-Klasse stellt uns eine Methode zur Verfügung, um einen Thread zu unterbrechen:

public static boolean interrupted() { 
      return currentThread().isInterrupted(true);
   }
Nach dem Login kopieren

Diese Methode besteht darin, zu überprüfen, ob die Unterbrechung den Wert „true“ zurückgibt, und die Nichtunterbrechung gibt „false“ zurück.

private native boolean isInterrupted(boolean ClearInterrupted);
Nach dem Login kopieren

Durch einen Blick auf den Quellcode können wir feststellen, dass die Unterbrechung erfolgt Der Thread ruft die Methode auf, um zu überprüfen, ob der Thread unterbrochen ist, und legt den Wert auf true fest. Wenn Sie zu diesem Zeitpunkt die Methode aufrufen, um zu überprüfen, ob der Thread unterbrochen ist, wird true zurückgegeben.

Hier muss jeder auf ein Problem achten: Die Methode Thread.interrupted() ändert nur den Status des aktuellen Threads, um ihm mitzuteilen, dass er unterbrochen ist, aber bei nicht blockierten Threads ändert sie nur die Unterbrechung Status, das heißt, Thread.isInterrupted () gibt true zurück. Für Threads in einem aufhebbaren Blockierungsstatus, z. B. Threads, die auf diese Funktionen warten, Thread.sleep (), löst dieser Thread nach dem Empfang des Interrupt-Signals und des Interrupts eine InterruptedException aus Der Status wird gleichzeitig auf „true“ gesetzt.

Der Grund für die durch Thread-Schlaf verursachte InterruptedException

Tatsächlich hat jeder ein wenig Verständnis dafür, also werde ich ein falsches Beispiel schreiben Lösen Sie dieses Problem gründlich. Finden Sie es heraus:

public void run() {

       int number = 0;

       while (true) {
           // 检查线程是否被中断,中断就停止下载
           if (isInterrupted()) {

               System.err.println("太慢了,我不下了");
               return;
           } else if (number >= 500) {
               System.out.println("下载完成");
               return;
           }

           number++;
           System.out.println("已下载" + number + "M");

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

Das ist unser Hauptprogramm, warten Sie 10 Sekunden und unterbrechen Sie dann den Thread

public static void main(String[] args) throws InterruptedException {

       Thread thread = new PrimeGenerator();

       // 启动线程
       thread.start();

       // 等待10秒后中断线程
       Thread.sleep(1000);

       // 中断线程
       thread.interrupt();
   }
Nach dem Login kopieren

Es sieht aus wie ein normales Programm, ist es aber nicht Was Sie sehen, ist dieser Code, der eine InterruptedException auslöst. Lassen Sie uns den Grund analysieren.

Hier müssen wir zunächst verstehen, dass die Thread.interrupt()-Methode einen laufenden Thread nicht mehr unterbricht Da die CPU zu diesem Zeitpunkt ausgelastet ist, müssen wir 10 Sekunden warten, bis die Downloadgeschwindigkeit erreicht ist Zu diesem Zeitpunkt unterbricht der Aufruf der Thread.interrupt()-Methode den Thread, aber der Ruhezustand in der run()-Methode wird aufgrund der Unterbrechung weiterhin ausgeführt Wenn Thread.sleep() erneut ausgeführt wird, wird eine InterruptedException ausgelöst, da der aktuelle Thread unterbrochen wurde.

Haben Sie den Grund für diese Ausnahme verstanden? Darüber hinaus gibt es zwei weitere Gründe, warum Threads InterruptedException-Ausnahmen generieren. Die unsachgemäße Verwendung der Methoden wait() und join() kann ebenfalls dazu führen, dass Threads diese Ausnahme auslösen.

Zwei Möglichkeiten, um zu überprüfen, ob ein Thread unterbrochen ist

Es gibt eine Methode interrupted() in der Thread-Klasse, mit der überprüft werden kann, wann der aktuelle Thread unterbrochen ist Mit der Methode isInterrupted( ) kann überprüft werden, ob der aktuelle Thread unterbrochen wurde.

Die zugrunde liegende Methode zum Unterbrechen eines Threads besteht darin, diese Eigenschaft auf true zu setzen, und die Methode isInterrupted() gibt nur diesen Eigenschaftswert zurück.

Ein Unterschied zwischen diesen beiden Methoden besteht darin, dass isInterrupted() den Attributwert von interrupted() nicht ändern kann, die interrupted()-Methode jedoch den Attributwert von interrupted ändern kann, Daher empfehlen wir bei der Bestimmung, wann ein Thread unterbrochen wird, die Verwendung von isInterrupted().

Das obige ist der detaillierte Inhalt vonWas ist Thread-Interrupt in Java? Welche Probleme verursacht eine Java-Thread-Unterbrechung?. 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ß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)

Detaillierte Erläuterung der fünf Zustände von Java-Threads und Zustandsübergangsregeln Detaillierte Erläuterung der fünf Zustände von Java-Threads und Zustandsübergangsregeln Feb 19, 2024 pm 05:03 PM

Vertiefendes Verständnis der fünf Zustände von Java-Threads und ihrer Konvertierungsregeln 1. Einführung in die fünf Zustände von Threads In Java kann der Lebenszyklus eines Threads in fünf verschiedene Zustände unterteilt werden, einschließlich des neuen Zustands (NEW) und des Bereitschaftszustands (RUNNABLE), Laufstatus (RUNNING), Blockierungsstatus (BLOCKED) und Beendigungsstatus (TERMINATED). Neuer Zustand (NEU): Wenn das Thread-Objekt erstellt wird, befindet es sich im neuen Zustand. Zu diesem Zeitpunkt hat das Thread-Objekt genügend Ressourcen zugewiesen, um die Aufgabe auszuführen

So lösen Sie die Java-Thread-Interrupt-Timeout-Ausnahme (InterruptedTimeoutException) So lösen Sie die Java-Thread-Interrupt-Timeout-Ausnahme (InterruptedTimeoutException) Aug 22, 2023 am 09:51 AM

So lösen Sie die Java-Thread-Interrupt-Timeout-Ausnahme (InterruptedTimeoutException) Einführung: In der gleichzeitigen Programmierung ist der Thread-Unterbrechungsvorgang ein sehr verbreitetes technisches Mittel. Es kann verwendet werden, um Threads zu beenden, die nicht mehr ausgeführt werden müssen, oder um mehrere Threads zu koordinieren. Manchmal verläuft die Thread-Unterbrechung jedoch nicht immer reibungslos und es kann zu einer Zeitüberschreitung der Unterbrechung kommen. In diesem Artikel wird erläutert, wie die Java-Thread-Interrupt-Timeout-Ausnahme (InterruptedTimeout) gelöst wird

Thread-Sicherheitsprobleme in Java-java.lang.ThreadDeath Thread-Sicherheitsprobleme in Java-java.lang.ThreadDeath Jun 25, 2023 am 08:15 AM

Java ist eine plattformübergreifende Programmiersprache, die sich aufgrund ihrer Portabilität, einfachen Erlernbarkeit und Benutzerfreundlichkeit zu einem wichtigen Akteur im Bereich der Computerprogrammierung entwickelt hat. Allerdings war die Thread-Sicherheit schon immer ein wichtiges Thema in der Java-Programmierung. Thread-Sicherheitsprobleme in Java scheinen auf den ersten Blick nicht leicht zu erkennen, führen jedoch häufig zu beunruhigenden Situationen. In diesem Artikel wird ein Thread-Sicherheitsproblem in Java untersucht: java.lang.ThreadDeath. Thread-Sicherheitsprobleme in Java in mehreren Threads

Methoden zum Lösen der Java-Thread-Statusausnahme (ThreadStateException) Methoden zum Lösen der Java-Thread-Statusausnahme (ThreadStateException) Aug 18, 2023 am 11:53 AM

Methoden zur Lösung der Java-Thread-Statusausnahme (ThreadStateException) Einführung: Bei der Verwendung von Java-Multithread-Programmierung tritt häufig das Problem der Thread-Statusausnahme (ThreadStateException) auf. Wenn wir bestimmte Methoden des Threads aufrufen und der Status des Threads nicht den Anforderungen der Methode entspricht, wird eine ThreadStateException ausgelöst. In diesem Artikel werden die Ursachen und Lösungen von Thread-Statusausnahmen vorgestellt und relevante Codebeispiele gegeben.

So lösen Sie die Java-Thread-Interrupt-Timeout-Fehlerausnahme (ThreadInterruptedTimeoutErrorExceotion) So lösen Sie die Java-Thread-Interrupt-Timeout-Fehlerausnahme (ThreadInterruptedTimeoutErrorExceotion) Aug 18, 2023 pm 07:33 PM

So lösen Sie die Java-Thread-Interrupt-Timeout-Fehlerausnahme (ThreadInterruptedTimeoutErrorException) Während des Java-Entwicklungsprozesses verwenden wir häufig Multithreading, um die Parallelitätsleistung und Effizienz des Programms zu verbessern. Bei der Verwendung von Threads können jedoch einige Probleme auftreten, z. B. eine Thread-Timeout-Fehlerausnahme (ThreadInterruptedTimeoutErrorException). In diesem Artikel wird erläutert, wie Sie dieses Problem lösen können.

Eine detaillierte Beschreibung der fünf Zustände von Java-Threads sowie ihrer Eigenschaften und Leistung in Multithread-Umgebungen Eine detaillierte Beschreibung der fünf Zustände von Java-Threads sowie ihrer Eigenschaften und Leistung in Multithread-Umgebungen Feb 18, 2024 pm 07:07 PM

Beschreiben Sie im Detail die fünf Zustände von Java-Threads und ihre Eigenschaften und Leistung in einer Multithread-Umgebung. Java ist eine objektorientierte Programmiersprache. Ihre Multithreading-Eigenschaften ermöglichen es uns, mehrere Aufgaben gleichzeitig auszuführen und die Parallelität zu verbessern Reaktion des Programms Geschlecht. In Java haben Threads fünf verschiedene Zustände, nämlich den neuen Zustand (New), den ausführbaren Zustand (Runnable), den blockierten Zustand (Blocked), den Wartezustand (Waiting) und den beendeten Zustand (Terminated). In diesem Artikel wird dies ausführlich vorgestellt

Eingehende Untersuchung verschiedener Zustände von Java-Threads und deren Auswirkungen auf die Programmausführung Eingehende Untersuchung verschiedener Zustände von Java-Threads und deren Auswirkungen auf die Programmausführung Feb 21, 2024 pm 11:27 PM

Eingehende Untersuchung verschiedener Zustände von Java-Threads und ihrer Auswirkungen auf die Programmausführung. In Java ist ein Thread eine leichte Ausführungseinheit, die unabhängig in einem Programm ausgeführt werden und bestimmte Aufgaben ausführen kann. Der Status eines Threads beschreibt die verschiedenen Phasen der Thread-Ausführung. Das Verständnis des Status eines Threads ist für das Schreiben von Multithread-Programmen und die Optimierung der Programmleistung sehr wichtig. Dieser Artikel befasst sich mit verschiedenen Zuständen von Java-Threads und deren Auswirkungen auf die Programmausführung und stellt spezifische Codebeispiele bereit. Zu den verschiedenen Status von Java-Threads gehören: NEW (neu),

Methoden zur Lösung der Java-Inter-Thread-Kommunikationsausnahme (ThreadCommunicationException) Methoden zur Lösung der Java-Inter-Thread-Kommunikationsausnahme (ThreadCommunicationException) Aug 18, 2023 pm 09:34 PM

Methoden zur Lösung der Java-Inter-Thread-Kommunikationsausnahme (ThreadCommunicationException) In Java-Programmen ist die Kommunikation zwischen Threads eine sehr häufige Anforderung. Aufgrund der gleichzeitigen Ausführungseigenschaften von Threads können jedoch Ausnahmen bei der Kommunikation zwischen Threads auftreten, z. B. ThreadCommunicationException. In diesem Artikel wird untersucht, wie diese Ausnahme behoben werden kann, und es werden entsprechende Codebeispiele aufgeführt. Ausnahmehintergrund Bei der Multithread-Programmierung müssen verschiedene Threads Daten austauschen oder Leistung erbringen

See all articles