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() | 此方法返回线程组的字符串表示形式。 |
下面来一个分组多个线程的代码。
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();
ThreadGroup示例
示例: ThreadGroupDemo.java
package com.yiibai;
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]