📅  最后修改于: 2023-12-03 15:32:02.895000             🧑  作者: Mango
Java多线程中,可以使用ThreadGroup
来对线程进行分组管理。一个线程可以加入到某个线程组中,也可以创建一个新的线程组。线程组可以有子线程组,并且线程组中的线程可以通过线程组名字来访问。当一个线程组的某个线程出现异常时,同一组中的其他线程也会受到影响,都将停止执行。
创建一个线程组可以使用以下构造函数:
ThreadGroup(String name) // 创建线程组并指定组名
ThreadGroup(ThreadGroup parent, String name) // 创建线程组指定组名以及父线程组
使用单个参数构造函数创建的线程组没有父线程组。
使用以下方法可以将线程加入到指定的线程组中:
void ThreadGroup.add(Thread t) // 将线程t加入到该线程组
当一个线程被创建时,默认是加入到其父线程组中,可以通过调用Thread
的以下构造函数来将线程加入到指定的线程组中:
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, String name)
Thread(ThreadGroup group, Runnable target, String name)
获取线程组中活动线程数的方法:
int ThreadGroup.activeCount() // 返回该线程组中活动线程的数目
使用以下方法可以设置线程组中所有线程的优先级:
void ThreadGroup.setMaxPriority(int priority) // 设置该线程组最高的优先级
以下方法可以终止线程组中的所有线程:
void ThreadGroup.interrupt() // 终止该组中所有的线程
下面是一个基本的线程组示例代码:
public class ThreadGroupExample implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName() + " is running");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " is finished");
}
public static void main(String[] args) {
ThreadGroupExample runnable = new ThreadGroupExample();
ThreadGroup group1 = new ThreadGroup("Group 1");
Thread t1 = new Thread(group1, runnable, "Thread 1");
Thread t2 = new Thread(group1, runnable, "Thread 2");
Thread t3 = new Thread(group1, runnable, "Thread 3");
t1.start();
t2.start();
t3.start();
System.out.println("活动线程数: " + group1.activeCount());
group1.list(); // 列出线程组中线程的信息
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("终止线程组 " + group1.getName());
group1.interrupt();
}
}
输出结果如下:
Thread 3 is running
Thread 1 is running
Thread 2 is running
活动线程数: 3
java.lang.ThreadGroup[name=Group 1,maxpri=10]
Thread[Thread 1,5,Group 1]
Thread[Thread 2,5,Group 1]
Thread[Thread 3,5,Group 1]
Thread 3 is finished
Thread 1 is finished
Thread 2 is finished
终止线程组 Group 1