什么是线程组?你学会了吗?( 二 )


3.2.1、activeCount 方法activeCount()方法用于返回此线程组及其子组中活动线程的数量的估计值,因为线程的数量是动态发生变化的,返回的值只是一个估计值 。
我们看一个简单的例子就知道了 。
public class MyThread extends Thread{    public MyThread(ThreadGroup group, String name) {        super(group, name);    }    @Override    public void run() {        try {            Thread.sleep(500);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}public class MyThreadMainTest {    public static void main(String[] args) throws Exception {        ThreadGroup tg = new ThreadGroup("group1");        MyThread t1 = new MyThread (tg, "t1");        MyThread t2 = new MyThread (tg, "t2");        t1.start();        t2.start();        System.out.println("线程组的名称:" +  tg.getName() + ",活动的线程数:" +  tg.activeCount());        Thread.sleep(1000);        System.out.println("线程组的名称:" +  tg.getName() + ",活动的线程数:" +  tg.activeCount());    }}输出结果如下:
线程组的名称:group1,活动的线程数:2线程组的名称:group1,活动的线程数:0第一次检查线程都处于运行状态,因此活动的线程数为 2;过 1 秒之后,线程运行结束,活动的线程数为 0 。
3.2.2、isDaemon 方法setDaemon()方法用于测试此线程组是否是守护线程组 。
需要注意的是:后台线程组和后台线程是两个概念,后台线程组的特性是最后一个线程执行完或最后一个线程被销毁时,后台线程组自动销毁,线程组只是为了统一管理线程的一个方式,跟后台线程有区别!
例子如下:
public class MyThread extends Thread{    public MyThread(ThreadGroup group, String name) {        super(group, name);    }    @Override    public void run() {        System.out.println("当前线程:" + Thread.currentThread().getName() + ",是否后台线程:" +  Thread.currentThread().isDaemon());        System.out.println("当前线程组:" + Thread.currentThread().getThreadGroup().getName() + " , 是否后台线程组:" +  Thread.currentThread().getThreadGroup().isDaemon());    }}public class MyThreadMainTest4 {    public static void main(String[] args) throws Exception {        ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();        new MyThread(mainGroup, "t1").start();        Thread.sleep(100);        // 设置守护线程组        ThreadGroup tg = new ThreadGroup("group1");        tg.setDaemon(true);        new MyThread(tg,"t2").start();    }}输出结果如下:
当前线程:t1,是否后台线程:false当前线程组:main,是否后台线程组:false当前线程:t2 , 是否后台线程:false当前线程组:group1,是否后台线程组:true3.2.3、interrupt 方法interrupt()方法用于尝试中断此线程组中的所有线程 。如果正在运行的线程没有进入阻塞 , 是无法中断的 。


推荐阅读