1.JAVA多線程(六)Java多線程之ThreadGroup
1.1 ThreadGroup
ThreadGroup是Java提供的一種對線程進行分組管理的手段,可以對所有線程以組爲單位進行操作,如設置優先級、守護線程等。
在Java程序中,默認情況下,新的線程都會加入到 main 線程所在的 group 中, main 線程的 group 和線程同名。和線程存在父子關係一樣, ThreadGroup 也存在父子關係
package com.yuanxw.chapter6;
import java.util.Arrays;
public class ThreadGroupService {
public static void main(String[] args) {
Thread thread = new Thread("thread-0"){
@Override
public void run() {
try {
// 睡眠100L
sleep(100L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
// 獲得當前線程的名稱
System.out.println("獲得當前線程的名稱:"+Thread.currentThread().getName());
// 獲得當前線程的線程線名稱
System.out.println("獲得當前線程的線程線名稱:"+Thread.currentThread().getThreadGroup().getName());
// 獲得thread-0線程的線程線名稱
System.out.println("獲得"+thread.getName()+"線程的線程線名稱:"+thread.getThreadGroup().getName());
// 創建線程組
ThreadGroup syncDbGroup = new ThreadGroup("SYNC_DB_GROUP");
Arrays.asList("thread-A","thread-B","thread-C","thread-D").forEach(name ->{
Thread t = new Thread(syncDbGroup, () -> {
while (true) {}
}, name);
t.setDaemon(true);
t.start();
});
ThreadGroup syncErpDbGroup = new ThreadGroup(syncDbGroup,"SYNC_ERP_DB_GROUP");
ThreadGroup syncOADbGroup = new ThreadGroup(syncDbGroup,"SYNC_OA_DB_GROUP");
Arrays.asList("thread-1","thread-2").forEach(name ->{
Thread t = new Thread(syncErpDbGroup, () -> {
while (true) {}
}, name);
t.setDaemon(true);
t.start();
});
System.out.println("返回此線程組及其子組中活動線程數的估計:"+syncDbGroup.activeCount());
System.out.println("返回此線程組及其子組中活動組數的估計:"+syncDbGroup.activeGroupCount());
// 設置線程組爲後臺線程組----最後一個線程執行結束或者被銷燬後,該後臺線程組自動銷燬
syncDbGroup.setDaemon(true);
// interrupt 的作用其實也不是中斷線程,而是「通知線程應該中斷了」,具體到底中斷還是繼續運行,應該由被通知的線程自己處理。
syncErpDbGroup.interrupt();
}
}
執行結果:
獲得當前線程的名稱:main
獲得當前線程的線程線名稱:main
獲得thread-0線程的線程線名稱:main
返回此線程組及其子組中活動線程數的估計:6
返回此線程組及其子組中活動組數的估計:2