1. 程式人生 > >Java併發程式設計隨筆【九】中被丟棄的執行緒組ThreadGroup

Java併發程式設計隨筆【九】中被丟棄的執行緒組ThreadGroup

執行緒組的初衷是作為一種隔離的機制,當然是出於安全的考慮。但是它們從來沒有真正的履行這個承諾,它們的安全價值已經差到根本不在Java安全模型的標準工作中被提及的地步。

既然執行緒組並沒有提供所提及的任何安全功能,那麼它們到底提供了什麼功能呢?不多,它們允許你同時把Thread的某些基本功能應用到一組執行緒上。其中有一些基本功能已經被廢棄了,剩下的也很少使用。

具有諷刺意味的是,從執行緒安全性的角度來看,ThreadGroup API非常弱。為了得到一個執行緒組中的活動執行緒列表,你必須呼叫enumerate方法,它有一個數組引數,並且陣列的容量必須足夠大,以便容納所有的活動執行緒。

        ThreadGroup group
= new ThreadGroup("test"); group.enumerate(thread);

activeCount方法返回一個執行緒組中活動執行緒的數量,但是,一旦這個陣列進行了分配,並傳遞給了enumeration方法,就不保證原先得到的活動執行緒數仍是正確的。如果執行緒數增加了,而陣列太小,enumerate方法就會悄然地忽略掉無法在陣列中容納的執行緒。

        group.activeCount();

列出執行緒組中子組的API也有類似的缺陷。雖然通過增加新的方法,這些問題都是可以得到修正,但是,它們目前還沒有被修正,因為執行緒組已經過時,所以實際上根本沒有必要修正。

總而言之,執行緒組並沒有提供太多的有用功能,而且它們提供的很多方法都有缺陷。所以我就完全沒有必要花費很多時間去了解他,可以使用執行緒池來替代它。