线程组ThreadGroup

什么是ThreadGroup

线程组ThreadGroup表示一组线程的集合。

线程组是为了方便和统一多个线程的管理而产生的。我们知道,在一个 Java 程序运行的时候会默认创建一个线程,我们称其为主线程(即为执行 main方法的线程)。其实,在一个 Java 程序运行的时候也会创建一个线程组,而这个主线程正是属于这个线程中的。

public class ThreadGroupExample {

    public static void main(String[] args) {
        Thread curThread = Thread.currentThread();
        ThreadGroup curGroup = curThread.getThreadGroup();
        System.out.println(String.format("thread name is [%s], threadGroup name is [%s] ", curThread.getName(), curGroup.getName()));
    }
}
//输出如下
thread name is [main], threadGroup name is [main]

线程组中不仅可以包含线程,也可以包含线程组,这个有点类似于文件夹的概念,线程对应的就是文件,线程组对应的就是文件夹,文件夹中不仅可以包含文件,也可以包含文件夹。

ThreadGroup中主要属性:所属父线程组(parent)、名字(name)、其中线程的最大优先级(maxPriority)、是否已经被销毁(destroyed)、是否为守护线程组(daemon)。

当新建一个线程 / 线程组之后,如果你没有给这个新建的线程 / 线程组指定一个父线程组,那么其默认会将当前执行创建线程 / 线程组代码的线程所属的父线程组作为新的线程 / 线程组的父线程组。

同时,一个线程只有调用了其 start方法之后,其才真正算是被添加到了对应的线程组中。

ThreadGroup 主要API

使用场景

ThreadGroup的目的就是对一组线程进行统一管理,比如需要在某一时刻或满足某一条件时将一些线程都中断,或者对线程设置一些统一的属性,或者对一组线程中的异常进行统一处理等等,都可以考虑使用线程组。

TODO:用到的时候,再补充实例代码

参考

线程组和 ThreadLocal

Java_多线程 (线程组)

Java并发编程与技术内幕:ThreadGroup线程组应用

Last updated