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