多執行緒:中斷執行緒
阿新 • • 發佈:2019-01-08
執行緒在兩種情況下會終止:
- run()執行完畢
- run()執行中出現未捕獲的異常
沒有可以強制執行緒終止的方法,但可以使用interrupt方法請求終止。
當對一個執行緒呼叫interrupt方法時,執行緒的boolean標誌位變為中斷狀態。通過檢查該標誌,可以判斷該執行緒是否被中斷,有兩個檢查方法:
- interrupted(): 判斷是否中斷,並清除中斷狀態
- isInterrupted(): 判斷是否中斷,不改變狀態
一個被阻塞的執行緒(sleep、wait)不能檢查中斷狀態,當對其呼叫interrupt(),會被Interrupted Exception異常中斷。
異常法中斷執行緒
public class MyThread extends Thread {
@Override
public void run() {
super.run();
try {
for (int i = 0; i < 500000; i++) {
if (this.interrupted()) {
System.out.println("停止了。");
throw new InterruptedException(); //之後的語句無法執行,return;同樣能停止
}
System. out.println("i = " + ( i + 1 ));
}
} catch (InterruptedException e) {
System.out.println("被捕獲了。");
e.printStackTrace();
}
}
}
public class Run {
public static void main(String[] args) {
try {
MyThread t = new MyThread();
t.start();
Thread.sleep(2000);
thread. interrupt();
} catch (InterruptedException e) {
System.out.println("被main捕獲了。");
e.printStackTrace();
}
System.out.println("end.")
}
}
結果:
i = ...
停止了。
end.
被捕獲了。