執行緒十:執行緒組
阿新 • • 發佈:2018-12-10
Java中的執行緒組代表一組執行緒,這個執行緒組也可以包含另外的執行緒組,通常用於管理有相關任務的一組執行緒的集合。使用執行緒組物件可以對其中的所有執行緒物件進行整體操作,執行緒組的應用簡化了多條執行緒的管理工作。執行緒組使用ThreadGroup來進行定義,其中可以定義Thread以及其他的ThreadGroup物件。
為了演示執行緒組的應用,我們看一個例項:
例子中我定義了兩個執行緒,並且把這兩個執行緒加入到一個執行緒組物件tg中,然後通過呼叫執行緒組物件tg的中斷方法來中斷執行緒組中的所有執行緒。執行緒在執行時首先判斷是否被中斷,如果沒有被中斷就一直輸出執行緒組的名字和當前執行緒的資訊,為了效果更加明顯,我在測試類Testing中定義了sleep方法,通過實驗結果大家可以看到執行的狀態。
雖然執行緒組看上去很有用處,實際上現在的程式開發中已經不推薦使用它了,主要有兩個原因:1.執行緒組ThreadGroup物件中比較有用的方法是stop、resume、suspend等方法,由於這幾個方法會導致執行緒的安全問題(主要是死鎖問題),已經被官方廢棄掉了,所以執行緒組本身的應用價值就大打折扣了。2.執行緒組ThreadGroup不是執行緒安全的,這在使用過程中獲取的資訊並不全是及時有效的,這就降低了它的統計使用價值。
雖然執行緒組現在已經不被推薦使用了,但是它線上程的異常處理方面還是做出了一定的貢獻。當執行緒執行過程中出現異常情況時,在某些情況下JVM會把執行緒的控制權交到執行緒關聯的執行緒組物件上來進行處理。所以對執行緒組的瞭解還是有一定必要的