JAVA多線程(六)Java多線程之ThreadGroup

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
發佈了125 篇原創文章 · 獲贊 166 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章