本文概述
Java提供了一种将多个线程组合到单个对象中的便捷方法。这样, 我们可以通过单个方法调用来挂起, 恢复或中断线程组。
注意:现在不建议使用suspend(), resume()和stop()方法。
Java线程组由java.lang.ThreadGroup类实现。
ThreadGroup代表一组线程。一个线程组也可以包括另一个线程组。线程组创建一棵树, 其中除初始线程组外的每个线程组都有一个父级。
允许线程访问有关其自己的线程组的信息, 但不能访问有关其线程组的父线程组或任何其他线程组的信息。
ThreadGroup类的构造方法
ThreadGroup类只有两个构造函数。
没有。 | 建设者 | 描述 |
---|---|---|
1) | ThreadGroup(String name) | 创建具有给定名称的线程组。 |
2) | ThreadGroup(ThreadGroup parent, String name) | 创建具有给定父组和名称的线程组。 |
ThreadGroup类的方法
ThreadGroup类中有许多方法。下面列出了ThreadGroup方法。
序号 | 修饰符和类型 | 方法 | 描述 |
---|---|---|---|
1) | void | checkAccess() | 此方法确定当前正在运行的线程是否具有修改线程组的权限。 |
2) | int | activeCount() | 此方法返回线程组及其子组中活动线程数的估计值。 |
3) | int | activeGroupCount() | 此方法返回线程组及其子组中活动组的数量的估计值。 |
4) | void | destroy() | 此方法破坏线程组及其所有子组。 |
5) | int | enumerate(Thread[]�list) | 此方法将线程组及其子组中的每个活动线程复制到指定的数组中。 |
6) | int | getMaxPriority() | 此方法返回线程组的最大优先级。 |
7) | String | getName() | 此方法返回线程组的名称。 |
8) | ThreadGroup | getParent() | 此方法返回线程组的父级。 |
9) | void | interrupt() | 此方法中断线程组中的所有线程。 |
10) | boolean | isDaemon() | 此方法测试线程组是否是守护程序线程组。 |
11) | void | setDaemon(boolean�daemon) | 此方法更改线程组的守护程序状态。 |
12) | boolean | isDestroyed() | 此方法测试此线程组是否已被销毁。 |
13) | void | list() | 此方法将有关线程组的信息打印到标准输出。 |
14) | boolean | parentOf(ThreadGroup�g | 此方法测试线程组是线程组参数还是其祖先线程组之一。 |
15) | void | suspend() | 此方法用于挂起线程组中的所有线程。 |
16) | void | resume() | 此方法用于恢复使用suspend()方法挂起的线程组中的所有线程。 |
17) | void | setMaxPriority(int�pri) | 此方法设置组的最大优先级。 |
18) | void | stop() | 此方法用于停止线程组中的所有线程。 |
19) | String | toString() | 此方法返回Thread组的字符串表示形式。 |
让我们看一下将多个线程组合在一起的代码。
ThreadGroup tg1 = new ThreadGroup("Group A");
Thread t1 = new Thread(tg1, new MyRunnable(), "one");
Thread t2 = new Thread(tg1, new MyRunnable(), "two");
Thread t3 = new Thread(tg1, new MyRunnable(), "three");
现在, 所有3个线程都属于一个组。在此, tg1是线程组名称, MyRunnable是实现Runnable接口的类, “ 1”, “ 2”和“ 3”是线程名称。
现在, 我们只能用一行代码中断所有线程。
Thread.currentThread().getThreadGroup().interrupt();
线程组示例
档案:ThreadGroupDemo.java
public class ThreadGroupDemo implements Runnable{
public void run() {
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
ThreadGroupDemo runnable = new ThreadGroupDemo();
ThreadGroup tg1 = new ThreadGroup("Parent ThreadGroup");
Thread t1 = new Thread(tg1, runnable, "one");
t1.start();
Thread t2 = new Thread(tg1, runnable, "two");
t2.start();
Thread t3 = new Thread(tg1, runnable, "three");
t3.start();
System.out.println("Thread Group Name: "+tg1.getName());
tg1.list();
}
}
输出:
one
two
three
Thread Group Name: Parent ThreadGroup
java.lang.ThreadGroup[name=Parent ThreadGroup, maxpri=10]
Thread[one, 5, Parent ThreadGroup]
Thread[two, 5, Parent ThreadGroup]
Thread[three, 5, Parent ThreadGroup]
评论前必须登录!
注册