多執行緒學習(四):停止執行緒
阿新 • • 發佈:2019-01-07
停止執行緒
停止一個執行緒可以使用Thread.stop()方法,但最好不用它,因為這個方法是不安全的,而且已被棄用。
大多數停止一個執行緒的操作使用Thread.interrupt()方法,但是這個方法不會終止一個正在執行的執行緒,還需要加入一個判斷才可以完成執行緒的停止。
Java中有3中停止執行緒的方法
1:使用退出標誌,使執行緒正常退出,也就是當run方法完成後執行緒終止。
2:使用stop方法強行終止執行緒,但是不推薦,因為已經作廢,使用會產生不可預料的結果。
3:使用interrupt方法中斷執行緒。
interrupt()
interrupt()方法只是在當前執行緒中打了一個停止的標記,並不是真的停止執行緒。
判斷執行緒是否是停止狀態
- this.interrupted(); 測試當前執行緒是否已經中斷,當前執行緒是指執行this.interrupted()方法的執行緒。
- this.isInterrupted(); 測試執行緒是否已經中斷
總結:
this.interrupted():是一個static方法,測試當前執行緒是否已經是中斷狀態,執行後會將狀態標誌清除為false。
this.isInterrupted():不是static方法,測試執行緒Thread物件是否已經是中斷狀態,但不清除狀態標誌。
通過異常法停止執行緒
public class MyThread extends Thread{ @Override public void run() { for(int i=0;i<500000;i++){ if(this.interrupted()){ System.out.println("已經是停止狀態了!我要退出了!"); break; } System.out.println("i="+(i+1)); } System.out.println("執行這句話,說明執行緒並未停止!"); } public static void main(String[] args) { MyThread thread=new MyThread(); try { thread.start(); thread.sleep(2000); thread.interrupt(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("執行結束!"); } }
上述例子說明:執行緒接受到interrupt()後,for迴圈執行結束後,執行緒會繼續執行。
小結:丟擲異常之後,後面的程式肯定不會再執行了,子執行緒catch後面都沒程式碼了,還不結束等個鬼啊,這個方法結束子執行緒不太高大上,土辦法!!!