如何優雅的停止乙個執行緒

2022-07-24 05:24:08 字數 732 閱讀 8540

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

他們的區別就在:

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

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

一般我們建立的都是使用者執行緒,那守護執行緒有哪些呢,例如跟程式一起啟動的gc執行緒就是守護執行緒。

停止執行緒的方法:

1.thread類的stop()方法,

但是這個方法是已過期的,不推薦使用。

因為在stop()方法的底層是強制停止執行緒的,就是不管它正在做什麼,它都是二話不說就停掉的,所以很有可能會出現資料丟失等等的問題。

2.手動丟擲異常:

這個也是比較好的解決辦法。

因為執行緒停止有兩種方式,一種是程式有異常,自動停止。另一種就是run方法執行結束,執行緒停止。

所以手動丟擲異常,想在**停就在**停。

3.使用條件判斷讓run()方法執行結束:

上面說到當run()方法執行結束後,執行緒也會停止,所以我們只要讓執行緒跑完run()方法就行了,也是很簡單的思路。

public

class thread005 extends

thread

else}}

public

void

chageflag()

public

static

void

main(string args)

}

執行緒停止繼續 如何優雅的停止乙個執行緒?

在之前的文章中 i code.online 併發程式設計 執行緒基礎 我們介紹了執行緒的建立和終止,從原始碼的角度去理解了其中的細節,那麼現在如果面試有人問你 如何優雅的停止乙個執行緒?你該如何去回答尼 能不能完美的回答尼?這裡有個思考 當處於sleep時,執行緒能否感受到中斷訊號?對於執行緒的停止...

如何停止乙個執行緒

停止乙個執行緒的最佳方法是讓它執行完畢,沒有辦法立即停止乙個執行緒,但你可以控制何時或什麼條件下讓他執行完畢。通過條件變數控制線程的執行,執行緒內部檢查變數狀態,外部改變變數值可控制停止執行。為保證執行緒間的即時通訊,需要使用volatile關鍵字或鎖,確保讀執行緒與寫執行緒變數狀態的一致性。pub...

如何優雅關閉乙個執行緒

當我們去thread類裡面找相關的介面時,發現有 個stop方法,看上去非常適合用來終止乙個執行緒,但是這個方法上面標了個 deprecated註解,非常明顯,這是乙個廢棄方法,不建議使用它。主要有兩個方面的原因 因為這個方法會將執行緒直接殺掉,沒有任何喘息機會,一旦執行緒被殺死,後面的 邏輯就再也...