1. 程式人生 > >Java之執行緒中斷

Java之執行緒中斷

 Java的中斷機制沒有搶佔式機制,只有協作式機制。為何要用中斷,執行緒處於阻塞(如呼叫了java的sleep,wait等等方法時)的時候,是不會理會我們自己設定的取消標誌位的,但是這些阻塞方法都會檢查執行緒的中斷標誌位。

interrupt isInterrupted interrupted
將中斷標識位設定為true 讀取中斷標識,為true則代表要中斷當前執行緒 讀取中斷標識並重新設定為false
public static void
main(String args[]) { Thread thread = new Thread(() -> { for (int i = 0; i < 10; i++) { if (Thread.currentThread().isInterrupted()) {//讀取中斷標識,為true則代表應該中斷當前執行緒 System.out.println("執行緒中斷了11"); //break; } boolean
isInterrupted = Thread.interrupted();//讀取中斷標識並清除 //System.out.println("isInterrupted:"+isInterrupted); try { Thread.sleep(1000); System.out.println("列印:" + i); } catch (InterruptedException e) {//拋異常後將中斷標識重新設定為false System.
out.println("執行緒中斷了"); } } System.out.println("執行緒結束"); }); thread.start(); try { Thread.sleep(3000); thread.interrupt();//將中斷標識位設定為true } catch (InterruptedException e) { e.printStackTrace(); } }

【參考資料】
Java 理論與實踐: 處理 InterruptedException
詳細分析Java中斷機制