1. 程式人生 > >多執行緒:中斷執行緒

多執行緒:中斷執行緒

執行緒在兩種情況下會終止:

  • 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.
被捕獲了。