Java之執行緒中斷
阿新 • • 發佈:2018-12-18
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();
}
}