1. 程式人生 > 實用技巧 >如何停止一個執行緒

如何停止一個執行緒

首先我們先了解下,執行緒是分為使用者執行緒和守護執行緒的,

他們的區別就在:

  使用者執行緒當我們的主執行緒停止後,使用者執行緒不會隨著主執行緒停止。

  守護執行緒當我們的主執行緒停止後,會跟隨著主執行緒一起停止。

一般我們建立的都是使用者執行緒,那守護執行緒有哪些呢,例如跟程式一起啟動的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() {
        int
i=1; while (flag){ System.out.println(Thread.currentThread().getName()+"我是子執行緒"+i); if(i<10){ i++; }else{ chageFlag(); } } } public void chageFlag(){ this.flag = false; } public
static void main(String[] args) { System.out.println(Thread.currentThread().getName()+"我是主執行緒"); Thread thread = new Thread005(); thread.start(); } }