如何停止一個執行緒
阿新 • • 發佈:2020-07-25
首先我們先了解下,執行緒是分為使用者執行緒和守護執行緒的,
他們的區別就在:
使用者執行緒當我們的主執行緒停止後,使用者執行緒不會隨著主執行緒停止。
守護執行緒當我們的主執行緒停止後,會跟隨著主執行緒一起停止。
一般我們建立的都是使用者執行緒,那守護執行緒有哪些呢,例如跟程式一起啟動的GC執行緒就是守護執行緒。
停止執行緒的方法:
1.Thread類的stop()方法,
但是這個方法是已過期的,不推薦使用。
因為在stop()方法的底層是強制停止執行緒的,就是不管它正在做什麼,它都是二話不說就停掉的,所以很有可能會出現資料丟失等等的問題。
2.手動丟擲異常:
這個也是比較好的解決辦法。
因為執行緒停止有兩種方式,一種是程式有異常,自動停止。另一種就是run方法執行結束,執行緒停止。
所以手動丟擲異常,想在哪裡停就在哪裡停。
3.使用條件判斷讓run()方法執行結束:
上面說到當run()方法執行結束後,執行緒也會停止,所以我們只要讓執行緒跑完run()方法就行了,也是很簡單的思路。
public class Thread005 extends Thread{ private volatile boolean flag = true;//加volatile是為了保證他的可見性 @Override public void run() { inti=1; while (flag){ System.out.println(Thread.currentThread().getName()+"我是子執行緒"+i); if(i<10){ i++; }else{ chageFlag(); } } } public void chageFlag(){ this.flag = false; } publicstatic void main(String[] args) { System.out.println(Thread.currentThread().getName()+"我是主執行緒"); Thread thread = new Thread005(); thread.start(); } }