Java提供了一种在单个对象中组合多个线程的便捷方法。通过这种方式,通过单个方法调用暂停,恢复或中断线程组。
注意: 现在不推荐使用
suspend()
,resume()
和stop()
方法。
Java线程组由java.lang.ThreadGroup
类实现。
ThreadGroup
表示一组线程。 线程组还可以包括其他线程组。 线程组创建一个树,其中除初始线程组之外的每个线程组都具有父线程。
允许线程访问有关其自己的线程组的信息,但它无法访问有关其线程组的父线程组或任何其他线程组的信息。
ThreadGroup
类只有两个构造函数。
编号 | 构造函数 | 描述 |
---|---|---|
1 | ThreadGroup(String name) |
创建具有给定名称的线程组。 |
2 | ThreadGroup(ThreadGroup parent, String name) |
创建具有给定父组和名称的线程组。 |
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() | 此方法返回线程组的字符串表示形式。 |
下面来一个分组多个线程的代码。
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
接口的类,“one”,“two”和“three”是线程名称。
现在只能通过一行代码中断所有线程。
Thread.currentThread().getThreadGroup().interrupt();
示例: ThreadGroupDemo.java
package com.zyiz; 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(); } }
执行上面示例代码,得到以下结果:
Thread Group Name: Parent ThreadGroup three two one java.lang.ThreadGroup[name=Parent ThreadGroup,maxpri=10] Thread[one,5,Parent ThreadGroup] Thread[two,5,Parent ThreadGroup] Thread[three,5,Parent ThreadGroup]