回答
使用ThreadGroup
在具有數千個線程的大型應用程序服務器中可能是一種有用的診斷技術。如果你的線程在邏輯上組合在一起,那麼當你得到堆棧跟蹤時,你可以看到有問題的線程是哪個組的一部分(例如「Tomcat線程」,「MDB線程」,「線程池X」等),可以是在追蹤和解決問題方面有很大的幫助。
簡短的回答是 - 不,不是。使用一個好處很少。
要稍微擴展,如果要將工作線程分組在一起,使用ExecutorService會更好。如果您想快速計算概念組中有多少線程處於活動狀態,則仍需要單獨檢查每個線程(因爲ThreadGroup.activeCount()是一種估計,意味着如果代碼的正確性取決於其輸出,則無用) 。
我甚至可以說,除了語義分隔之外,你最近從一個人那裏得到的唯一東西是作爲一個組的一部分構造的線程將拾取守護進程標誌和一個合理的名字根據他們的小組。使用它作爲在構造函數調用中填充幾個基元的快捷方式(通常您只需要編寫一次,但可能是在循環和/或方法調用中啓動線程)。
所以 - 我真的沒有看到任何令人信服的理由來使用它。幾個月前,我專門嘗試過,但失敗了。
編輯 - 我假設如果您使用SecurityManager運行並且想斷言只有同一組中的線程可以相互中斷,那麼一個潛在的用途是。即使這是非常有邊界的,因爲默認實現總是返回true,對於線程任意非系統線程組。如果你正在實現你自己的SecurityManager,你可以讓它根據任何其他標準做出決定(包括在創建集合時存儲線程的典型技術)。
如何在創建集合時將「線程」存儲在集合中。我看不到你怎麼知道什麼時候創建線程。 – 2009-10-30 11:26:45
你去'新線程(...)'的位。 :-)由於一個線程只能在構造時被明確地分配給一個組,因此假設該OP的代碼明確地創建它們是合理的。如果他不是自己調用構造函數,他無論如何都不能改變線程組。 – 2009-10-30 12:09:42
請勿將ThreadGroup
用於新代碼。改爲使用Executor
東西java.util.concurrent
。
對提供的答案有一些免費(6年前左右)。但是,雖然併發API提供了許多構造,但ThreadGroup
可能仍然有用。它提供以下功能:
- 線程的邏輯組織(用於診斷目的)。
- 您可以
interrupt()
組中的所有線程。 (中斷完全正常,不像suspend()
,resume()
和stop()
)。 - 您可以設置組中線程的最大優先級。 (不知道這有多廣泛,但你有它)。
- 將
ThreadGroup
設置爲守護進程。 (所以添加到它的所有新線程將是守護進程線程)。 - 它允許您覆蓋它的
uncaughtExceptionHandler
,這樣如果組中的一個線程拋出一個異常,您就有一個回調來處理它。 - 它爲您提供了一些額外的工具,例如獲取線程列表,您擁有多少活動工具等等。有一組工作線程或某種線程池時很有用。
- 1. 在單獨的線程中創建ServerSocket?
- 2. 在Java中創建對象有什麼好處?
- 3. Java中的ThreadGroup
- 4. 查詢在java中創建單獨的線程?
- 5. 在SQL和MySQL中創建存儲過程有什麼好處?
- 6. 在javascript中創建對象(帶有新的)有什麼好處?
- 7. 用線程編程有什麼好處?
- 8. 爲什麼不創建單獨的線程?
- 9. 在多個線程上使用單個io_service有什麼好處?
- 10. 爲什麼單獨線程中的TidTCPClient阻塞主線程?
- 11. 單獨的Java線程中的OutOfMemoryError
- 12. OnUserPreferenceChanged掛起:在單獨的線程中創建的DataGridView
- 13. 在Java中創建線程
- 14. 在android中爲Json響應創建pojo類有什麼好處?
- 15. 創建從一個單獨的線程
- 16. 爲什麼單線程java程序有這麼多的線程?
- 17. 在一體化表中使用單獨的角色橋表有什麼好處?
- 18. 在QT中創建連接在單獨線程中使用
- 19. 在Python中,在多線程程序中調用os.waitpid有什麼好處?
- 20. 傳回在單獨線程中創建的變量? Android
- 21. 在iOS的單獨線程中創建PDF文件
- 22. 在線程模塊中使用python中的Eventlet模塊有什麼好處?
- 23. 什麼是在asp.net中動態創建角色的好處mvc
- 24. 什麼是在Java中創建等值線圖的好(免費)庫?
- 25. Ruby的ThreadGroup是什麼?
- 26. 在java中創建構造函數的額外好處是什麼?
- 27. 通過實現接口創建單例類有什麼好處?
- 28. Java中的單獨代碼是什麼?
- 29. Java - 爲通過Internet發送對象創建單獨的線程
- 30. 協程有什麼好處?
我認爲在過去,我不認爲它給你任何東西,只是適當地命名線程。但是,如果您不能修改線程名稱,或者您有一個監視線程活動的工具,那麼這就是另一回事。 – 2009-10-30 11:13:37
公平點,但附加結構可能很有用,例如聚合線程組的CPU使用率。 – skaffman 2009-10-30 11:17:35
由於這個特殊原因,我在一個非常大的企業應用程序中使用它們。我本來可以自己跟蹤他們,但是這會迫使我編寫相當多的代碼來管理我的收藏內容,當線程完成,死亡等。 – Fredrik 2009-10-30 11:20:09