淺談一下Java線程組ThreadGroup
1 簡介
一個線程集合。是為了更方便地管理線程。父子結(jié)構(gòu)的,一個線程組可以集成其他線程組,同時也可以擁有其他子線程組。
從結(jié)構(gòu)上看,線程組是一個樹形結(jié)構(gòu),每個線程都隸屬于一個線程組,線程組又有父線程組,根線程組——System線程組。
2 線程組樹的結(jié)構(gòu)
- JVM創(chuàng)建的system線程組是用來處理JVM的系統(tǒng)任務(wù)的線程組,例如對象的銷毀等
- system線程組的直接子線程組是main線程組,這個線程組至少包含一個main線程,用于執(zhí)行main方法
- main線程組的子線程組就是應(yīng)用程序創(chuàng)建的線程組。


一個線程可以訪問其所屬線程組的信息,但不能訪問其所屬線程組的父線程組或者其他線程組的信息。
3 線程組的構(gòu)造
java.lang.ThreadGroup 提供了兩個構(gòu)造函數(shù):
| Constructor | Description |
| ThreadGroup(String name) | 根據(jù)線程組名稱創(chuàng)建線程組,其父線程組為main線程組 |
| ThreadGroup(ThreadGroup parent, String name) | 根據(jù)線程組名稱創(chuàng)建線程組,其父線程組為指定的parent線程組 |
- 兩個構(gòu)造函數(shù)的用法:


4 API
1.public ThreadGroup(ThreadGroup parent, String name) 分析:構(gòu)建一個新的線程組,這個新組的父級是當(dāng)前正在運行的線程的線程組; 2.public ThreadGroup(ThreadGroup parent, String name) 分析:構(gòu)建一個新的線程組,這個新租的父級是指定的線程組; 3.public int activeCount() 分析:返回此線程組及其子組中活動線程的數(shù)量的估計值,遞歸遍歷該線程組中所有的子組; 返回的值只是一個估計值,因為用這種方法遍歷內(nèi)部數(shù)據(jù)結(jié)構(gòu)因為線程的數(shù)量可能會動態(tài)發(fā)生變化,并且可能會受到某些系統(tǒng)線程的影響,此方法主要用于調(diào)試和監(jiān)視目的; 4.public int activeGroupCount() 分析:返回此線程組及其子組中活動組的數(shù)目的估計值。遞歸遍歷該線程組中的所有子群。返回的值只是一個估計值,因為線程組的數(shù)量可能會動態(tài)變化,而這種方法遍歷內(nèi)部數(shù)據(jù)結(jié)構(gòu)。此方法主要用于調(diào)試和監(jiān)視目的。 5.public final void checkAccess() 分析:確定當(dāng)前運行的線程是否具有修改此線程組的權(quán)限。 如果存在安全管理器,它的checkaccess方法調(diào)用這個線程組作為其參數(shù)。這可能會導(dǎo)致拋出SecurityException。 6.public final void destroy() 分析:破壞此線程組及其所有子組,此線程組必須為空,表示此線程組中的所有線程必須都停止; 7.public int enumerate(Thread[] list) 分析:將這個線程組復(fù)制到它所在的組及其子組中; 8.public int enumerate(Thread[] list, boolean recurse) 分析:將這個線程組復(fù)制到它所在的線程組,如果recurse是true,此方法遞歸枚舉此線程組的所有子組,并對這些子組中的每個活動線程進行引用。如果數(shù)組太短無法保存所有的線程,額外的線程將被默默的忽略; 9.public int enumerate(ThreadGroup[] list) 分析:復(fù)制線程組中的活躍線程引用到它當(dāng)前線程組及其子組中; 10.public int enumerate(ThreadGroup[] list, boolean recurse) 分析:復(fù)制線程組中的活躍線程引用到它當(dāng)前線程組及其子組中,如果recurse是true,此方法遞歸枚舉此線程組的所有子組,并對這些子組中的每個活動線程組進行引用。 11.public final int getMaxPriority() 分析:返回此線程組的最大優(yōu)先級。作為該組的一部分的線程不能具有比優(yōu)先級最高的優(yōu)先級。 12.public final String getName() 分析:返回此線程組的名稱; 13.public final ThreadGroup getParent() 分析:返回此線程組的父級; 14.public final void interrupt() 分析:終端此線程組中的所有線程; 15.public final boolean isDaemon() 分析:測試此線程組是否是守護線程組。當(dāng)終止最后一個線程或它的最后一個線程組被銷毀時,守護線程組會自動銷毀; 16.public boolean isDestroyed() 分析:測試此線程組是否已被銷毀; 17.public void list() 分析:將此線程組的信息打印到標(biāo)準輸出。此方法僅用于調(diào)試。 18.public final boolean parentOf(ThreadGroup g) 分析:測試此線程組是線程組參數(shù)還是其祖先線程組之一; 19.public final void setDaemon(boolean daemon) 分析:更改此線程組的守護進程狀態(tài); 20.public final void setMaxPriority(int pri) 分析:設(shè)置組的最大優(yōu)先級。線程組中具有較高優(yōu)先級的線程不會受到影響
查看當(dāng)前線程組的信息。
public static void list(){
ThreadGroup tg = new ThreadGroup ("subgroup 1");
Thread t1 = new Thread (tg, "thread 1");
Thread t2 = new Thread (tg, "thread 2");
Thread t3 = new Thread (tg, "thread 3");
tg = new ThreadGroup ("subgroup 2");
Thread t4 = new Thread (tg, "my thread");
tg = Thread.currentThread ().getThreadGroup ();
int agc = tg.activeGroupCount ();
System.out.println ("Active thread groups in " + tg.getName () + " thread group: " + agc);
tg.list ();
}輸出如下:
Active thread groups in main thread group: 2
java.lang.ThreadGroup[name=main,maxpri=10]
Thread[main,5,main]
java.lang.ThreadGroup[name=subgroup 1,maxpri=10]
java.lang.ThreadGroup[name=subgroup 2,maxpri=10]5 終止線程組中的所有線程
一個線程不應(yīng)由其他線程來強制中斷或停止,而是應(yīng)該由線程自己自行停止。
因此 Thread.currentThread().stop(), Thread.currentThread().suspend(), Thread.currentThread().resume() 都已經(jīng)被廢棄了。
interrupt() 方法的作用是通知線程應(yīng)該中斷了,具體到底中斷還是繼續(xù)運行,由被通知的線程處理。
到此這篇關(guān)于淺談一下Java線程組ThreadGroup的文章就介紹到這了,更多相關(guān)Java線程組ThreadGroup內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Security UserDetails實現(xiàn)原理詳解
這篇文章主要介紹了Spring Security UserDetails實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
SpringBoot 靜態(tài)資源導(dǎo)入及首頁設(shè)置問題
本節(jié)了解一下 SpringBoot 中 Web 開發(fā)的靜態(tài)資源導(dǎo)入和首頁設(shè)置,對應(yīng) SpringBoot-03-Web 項目,本節(jié)主要是從源碼的角度,研究了一下靜態(tài)資源導(dǎo)入和首頁設(shè)置的問題2021-09-09
IDEA啟動tomcat控制臺中文亂碼問題的解決方法(100%有效)
很多人在idea中啟動項目時會出現(xiàn)控制臺的中文亂碼,其實也無傷大雅,但是本人看著不舒服,下面這篇文章主要給大家介紹了關(guān)于IDEA啟動tomcat控制臺中文亂碼問題的解決方法,需要的朋友可以參考下2022-09-09
java數(shù)據(jù)結(jié)構(gòu)與算法之奇偶排序算法完整示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之奇偶排序算法,較為詳細的分析了奇偶算法的原理并結(jié)合完整示例形式給出了實現(xiàn)技巧,需要的朋友可以參考下2016-08-08

