简介
Java ThreadGroup 类表示一组线程。它还可以包括其他线程组。线程组形成一棵树,其中除了初始线程组之外的每个线程组都有一个父线程组。
类声明
以下是 java.lang.ThreadGroup 类的声明-
public class ThreadGroup
extends Object
implements Thread.UncaughtExceptionHandler
类构造函数
序号. | 构造函数及说明 |
---|---|
1 | ThreadGroup(String name) 这将构造一个新的线程组。 |
2 | ThreadGroup(ThreadGroup Parent, String name) 这将创建一个新的线程组。 |
类方法
序号 | 方法及说明 |
---|---|
1 | int activeCount() 此方法返回此线程组中活动线程数量的估计值。 |
2 | int activeGroupCount() 此方法返回数量的估计值此线程组中的活动组。 |
3 | void checkAccess () 该方法判断当前运行的线程是否有权限修改该线程组。 |
4 | void destroy() 此方法销毁该线程组及其所有子组。 |
5 | int enumerate(Thread[] list) 此方法复制到该线程组及其子组中每个活动线程的指定数组。 |
6 | int enumerate(Thread[] list, boolean recurse) 此方法将此线程组中的每个活动线程复制到指定的数组中。 |
7 | int enumerate(ThreadGroup[] list) 该方法复制到指定数组中对此线程组中每个活动子组的引用。 |
8 | int enumerate(ThreadGroup[] list, boolean recurse) 此方法将对此线程组中每个活动子组的引用复制到指定的数组中。 |
9 | int getMaxPriority() 该方法返回该线程组的最大优先级。 |
10 | String getName() 该方法返回该线程组的名称。 |
11 | ThreadGroup getParent() 此方法返回此线程组的父级。 |
12 | void Interrupt() 该方法中断该线程组中的所有线程。 |
13 | boolean isDaemon() 此方法测试此线程组是否为守护线程组。 |
14 | boolean isDestroyed() 该方法测试该线程组是否已被销毁。 |
15 | void list() 该方法将有关该线程组的信息打印到标准输出。 |
16 | boolean ParentOf(ThreadGroup g) 此方法测试此线程组是否是线程组参数或其祖先之一线程组。 |
17 | void setDaemon(boolean daemon) 该方法改变该线程组的守护进程状态。 |
18 | void setMaxPriority(int pri) 该方法设置组的最大优先级。 |
19 | String toString() 此方法返回此线程组的字符串表示形式。 |
20 | void uncaughtException(Thread t, Throwable e) 当该线程组中的某个线程由于未捕获的异常而停止,并且该线程没有安装特定的 Thread.UncaughtExceptionHandler 时,Java 虚拟机将调用此方法。 |
继承的方法
该类继承以下类的方法 -
- java.lang.Object
示例
以下示例展示了 ThreadGroup 在多线程程序中的用法。
package com.yxjc123;
public class ThreadGroupDemo implements Runnable {
public static void main(String[] args) {
ThreadGroupDemo tg = new ThreadGroupDemo();
tg.func();
}
public void func() {
try {
//创建父ThreadGroup
ThreadGroup pGroup = new ThreadGroup("Parent ThreadGroup");
//为父ThreadGroup创建子ThreadGroup
ThreadGroup cGroup = new ThreadGroup(pGroup, "Child ThreadGroup");
//创建一个线程
Thread t1 = new Thread(pGroup, this);
System.out.println("Starting " + t1.getName() + "...");
t1.start();
//创建另一个线程
Thread t2 = new Thread(cGroup, this);
System.out.println("Starting " + t2.getName() + "...");
t2.start();
//显示活动线程数
System.out.println("Active threads in \"" + pGroup.getName()
+ "\" = " + pGroup.activeCount());
// 阻塞直到其他线程完成
t1.join();
t2.join();
} catch (InterruptedException ex) {
System.out.println(ex.toString());
}
}
// 实现 run()
public void run() {
for(int i = 0;i < 1000;i++) {
i++;
}
System.out.println(Thread.currentThread().getName() + " finished executing.");
}
}
输出
让我们编译并运行上述程序,将产生以下结果 -
Starting Thread-0...
Starting Thread-1...
Thread-0 finished executing.
Active threads in "Parent ThreadGroup" = 1
Thread-1 finished executing.