Java中使用ThreadGroup来表示线程组,对一批线程进行管理,控制一个线程组相当于掌控者属于这个线程组内的所有线程,但线程创建时若没有显示指定线程所属的线程组,则会被分到默认的线程组内
当某个线程加入了某个线程组后,该线程的整个周期都会在该线程组中,线程周期内无法改变该线程所属的线程组
创建Thread类时可以指定当前线程所属的线程组
- Thread(ThreadGroup group,Runnable runnable),该线程属于group线程组,以runnable中的run方法作为线程执行体
- Thread(ThreadGroup group,String name) 以name命名的新线程,属于group线程组
- Thread(ThreadGroup group,Runnable runnable,String name) 以name命名的新线程,该线程属于group线程组,以runnable中的run方法作为线程执行体
Thread提供了一个getThreadGroup()方法,返回当前线程所属的线程组对象,该对象的getName()方法获取线程组的名称
ThreadGroup类的两个构造器
- ThreadGroup(String name) 以指定的name作为名字创建线程组
- ThreadGroup(ThreadGroup parent,String name) 以指定的父线程组,指定的name作为名字创建线程组
注意线程组一旦被创建,线程组的名字不可被更改
ThreadGroup类的几个操作线程组内所有线程的常用方法
- activeCount() 返回线程组内活动的线程数目 int
- isDaemon() 是否为后台线程组 boolean
- setDaemon(boolean bool) 设置线程组为后台线程组----最后一个线程执行结束或者被销毁后,该后台线程组自动销毁
- interrupt() 中断线程组内所有的线程
举几个列子
package com.MrLiu.group.threadGroup;
public class ThreadClazz{
public static void main(String[] args) {
//创建一个默认线程
new ThreadGroups("默认线程组线程").start();
//创建一个线程组
ThreadGroup group =new ThreadGroup("新线程组");
new ThreadGroups(group,"新线程一").start();
new ThreadGroups(group,"新线程二").start();
}
}
class ThreadGroups extends Thread{
//线程名字构造器
public ThreadGroups(String name){
super(name);
}
public ThreadGroups(ThreadGroup group,String name){
super(group,name);
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("当前线程为"+getName());
System.out.println("所属线程组"+Thread.currentThread().getThreadGroup().getName());
System.out.println("-------------------------------------------------------------------------------------");
}
}
}