线程组
我们可以把线程归属到某个线程组中,线程组可以包含多个线程以及线程组,线程和线程组组成了父子关系,是个树形结构,如下图:
使用线程组可以方便管理线程,线程组提供了一些方法方便方便我们管理线程。
创建线程关联线程组
创建线程的时候,可以给线程指定一个线程组,代码如下:
package com.itsoku.chat02; import java.util.concurrent.TimeUnit; /** * <b>description</b>:<br> * <b>time</b>:2019/7/13 17:53 <br> * <b>author</b>:微信公众号:路人甲Java,专注于java技术分享(带你玩转 爬虫、分布式事务、异步消息服务、任务调度、分库分表、大数据等),喜欢请关注! */ pub<mark style="color:transparent">来4源gaodaimacom搞#代%码*网</mark>lic class Demo1 { public static class R1 implements Runnable { @Override public void run() { System.out.println("threadName:" + Thread.currentThread().getName()); try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) throws InterruptedException { ThreadGroup threadGroup = new ThreadGroup("thread-group-1"); Thread t1 = new Thread(threadGroup, new R1(), "t1"); Thread t2 = new Thread(threadGroup, new R1(), "t2"); t1.start(); t2.start(); TimeUnit.SECONDS.sleep(1); System.out.println("活动线程数:" + threadGroup.activeCount()); System.out.println("活动线程组:" + threadGroup.activeGroupCount()); System.out.println("线程组名称:" + threadGroup.getName()); } }
输出结果:
threadName:t1
threadName:t2
活动线程数:2
活动线程组:0
线程组名称:thread-group-1
activeCount()方法可以返回线程组中的所有活动线程数,包含下面的所有子孙节点的线程,由于线程组中的线程是动态变化的,这个值只能是一个估算值。
为线程组指定父线程组
创建线程组的时候,可以给其指定一个父线程组,也可以不指定,如果不指定父线程组,则父线程组为当前线程的线程组,java api有2个常用的构造方法用来创建线程组:
public ThreadGroup(String name) public ThreadGroup(ThreadGroup parent, String name)
第一个构造方法未指定父线程组,看一下内部的实现:
public ThreadGroup(String name) { this(Thread.currentThread().getThreadGroup(), name); }