线程组的使用

首先什么是线程组?

线程组表示一个线程的集合,还可以包含其它线程组。像一棵树
在这里插入图片描述
我们首先看一下线程组怎么创建

ThreadGroup(String name)  //构造一个新线程组。
 //name表示线程组的名字,此时如果不指定父线程组的话就是main线程组,main线程组的父线程组是System线程组
ThreadGroup(ThreadGroup parent, String name) //创建一个新线程组。 
//创建一个新的线程组并且加入指定的线程组中。

演示验证:
在这里插入图片描述
在这里插入图片描述
上述演示中用到的方法:

getParent()  //返回当前线程组的父线程组
getName()    //返回线程组的名称

我们知道线程组是线程的集合,因此线程组可以存放线程,下边一起看看线程组中怎么存放线程

Thread(ThreadGroup group, String name) 
          分配新的 Thread 对象。 
Thread(ThreadGroup group, Runnable target) 
          分配新的 Thread 对象。 
Thread(ThreadGroup group, Runnable target, String name) 
          分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。 
Thread(ThreadGroup group, Runnable target, String name, long stackSize) 
          分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。 

我们看到线程加入线程组是采用构造方法的

演示一下:

public class Test {
    public static void main(String[] args) {
      ThreadGroup threadGroup = new ThreadGroup("线程组1");
      Thread thread1 = new Thread(threadGroup,"线程1");
      Thread thread2 = new Thread(threadGroup,"线程2");
      thread1.start();
      thread2.start();
      System.out.println("活动的线程数"+threadGroup.activeCount());
      System.out.println(thread1.getThreadGroup().getName());
    }
}
//打印结果:
活动的线程数2
线程组1

注:activeCount()返回的是该线程组中活动线程的数量估计值

注意:

允许线程访问线程所在线程组的信息,但是不允许访问父线程组和其它线程组的信息

查看线程组中常用的方法

activeCount()     //返回该线程组中活动线程的估计数
activeGroupCount()   //返回该线程组中活动线程组的估计数
destory()       //销毁此线程组以及线程组中的所有线程
getName()      //返回该线程组的名字
getParent()   //返回该线程组的父线程组
interrupt()    //中断该线程组的所有线程,即将所有线程的中断标记设置为true
isDaemon()       //判断该线程组是否是一个后台线程组
isDestoryed()    //判断该线程组是否已经销毁
list()          //将线程组的信息打印到控制台

线程组的练习
在这里插入图片描述
按照上图进行线程组的练习:

public class ThreadTest implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
    
    }
}
------------------------------
public class ThreadGroupTest {
    public static void main(String[] args) {
        //创建一个线程组
        ThreadGroup threadGroup = new ThreadGroup("父线程组");
        //创建两个线程放进线程父线程组中
        Thread thread1 = new Thread(threadGroup,new ThreadTest(),"线程1");
        Thread thread2 = new Thread(threadGroup,new ThreadTest(),"线程2");
        //创建一个线程组放进父线程组中
        ThreadGroup threadGroup1 = new ThreadGroup(threadGroup,"线程组1");
        Thread thread1_1 = new Thread(threadGroup1,new ThreadTest(),"线程1.1");
        Thread thread1_2 = new Thread(threadGroup1,new ThreadTest(),"线程2.1");
        //我们启动一下所有的线程
        thread1.start();
        thread2.start();
        thread1_1.start();
        thread1_2.start();
        System.out.println("活动线程数"+threadGroup.activeCount());
        System.out.println("活动线程组"+threadGroup.activeGroupCount());
        System.out.println(threadGroup.getName());
        threadGroup.list();
        threadGroup1.list();
    }
}

结果分析:
在这里插入图片描述
批量中断线程:

调用线程组中的interrupt方法,则该线程组中的所有子孙线程的中断标志将会设为true。

public class ThreadTest implements Runnable {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());
        System.out.println(Thread.currentThread().getName()+"是否是中断线程"+Thread.currentThread().isInterrupted());
    }
}

-------------------------------------------------------
public class ThreadGroupTest {
    public static void main(String[] args) {
        //创建一个线程组
        ThreadGroup threadGroup = new ThreadGroup("父线程组");
        //创建两个线程放进线程父线程组中
        Thread thread1 = new Thread(threadGroup,new ThreadTest(),"线程1");
        Thread thread2 = new Thread(threadGroup,new ThreadTest(),"线程2");
        //创建一个线程组放进父线程组中
        ThreadGroup threadGroup1 = new ThreadGroup(threadGroup,"线程组1");
        Thread thread1_1 = new Thread(threadGroup1,new ThreadTest(),"线程1.1");
        Thread thread1_2 = new Thread(threadGroup1,new ThreadTest(),"线程2.1");
        //我们启动一下所有的线程
        //设置中断标志
        thread1.start();
        thread2.start();
        thread1_1.start();
        thread1_2.start();
        threadGroup.interrupt(); //线程组设置中断
        threadGroup.list();
        threadGroup1.list();
    }
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值