天天看點

避免使用線程組(thread group)。

除了線程、鎖和螢幕之外,線程系統還提供了一個基本的抽象,即線程組。線程組的初衷是作為一種隔離applet(小程式)的機制,當然是出于安全的考慮。但是他們從來沒有真正履行這個承諾,他們的安全價值已經差到根本不在Java安全模型的标準工作中提及的地步。

他們允許你同時把Thread的某些基本功能應用到一組線程中。其中有一些基本功能已經被廢棄了,剩下的也很少使用。

具有諷刺意味的是,從線程安全性的角度來看,ThreadGroup API非常弱。為了得到一個線程組中的活動線程清單,你必須調用enumerate方法,它有一個數組參數,并且數組的容量必須足夠大,以便容納所有的活動線程。activeCount方法傳回一個線程組中活動線程的數量,但是,一旦這個數組進行了配置設定,并傳遞給了enumerate方法,就不保證原先得到的活動線程數仍是正确的。如果線程數增加了,而數組太小,enumerate方法就會悄然的忽略掉無法再數組中容納的線程。

列出線程組彙總子組的API也有類似的缺陷。雖然通過增加新的方法,這些問題有可能得到修正,但是他們目前還沒有修正,因為線程組已經過時了,是以實際上根本沒有必要修正。

總而言之,線程組并沒有提供太多有用的功能,而且他們提供的許多功能還是有缺陷的。我們最好把線程組看做是一個不成功的試驗,你可以忽略掉他們。如果你正在設計的一個類需要處理線程的邏輯組,或許就應該使用線程池executor。

繼續閱讀