Java中的线程组

本文概述

  • ThreadGroup类的构造方法
  • ThreadGroup类的方法
  • 线程组示例
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”是线程名称。
【Java中的线程组】现在, 我们只能用一行代码中断所有线程。
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]

    推荐阅读