本文概述
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]
srcmini
评论前必须登录!
注册