简介

Java ThreadGroup 类表示一组线程。它还可以包括其他线程组。线程组形成一棵树,其中除了初始线程组之外的每个线程组都有一个父线程组。

类声明

以下是 java.lang.ThreadGroup 类的声明-

public class ThreadGroup
   extends Object
      implements Thread.UncaughtExceptionHandler 

类构造函数

序号.构造函数及说明
1

ThreadGroup(String name)

这将构造一个新的线程组。

2

ThreadGroup(ThreadGroup Parent, String name)

这将创建一个新的线程组。

类方法

序号方法及说明
1int activeCount()

此方法返回此线程组中活动线程数量的估计值。

2int activeGroupCount()

此方法返回数量的估计值此线程组中的活动组。

3void checkAccess ()

该方法判断当前运行的线程是否有权限修改该线程组。

4void destroy()

此方法销毁该线程组及其所有子组。

5int enumerate(Thread[] list)

此方法复制到该线程组及其子组中每个活动线程的指定数组。

6int enumerate(Thread[] list, boolean recurse)

此方法将此线程组中的每个活动线程复制到指定的数组中。

7int enumerate(ThreadGroup[] list)

该方法复制到指定数组中对此线程组中每个活动子组的引用。

8int enumerate(ThreadGroup[] list, boolean recurse)

此方法将对此线程组中每个活动子组的引用复制到指定的数组中。

9int getMaxPriority()

该方法返回该线程组的最大优先级。

10String getName()

该方法返回该线程组的名称。

11ThreadGroup getParent()

此方法返回此线程组的父级。

12void Interrupt()

该方法中断该线程组中的所有线程。

13boolean isDaemon()

此方法测试此线程组是否为守护线程组。

14boolean isDestroyed()

该方法测试该线程组是否已被销毁。

15void list()

该方法将有关该线程组的信息打印到标准输出。

16boolean ParentOf(ThreadGroup g)

此方法测试此线程组是否是线程组参数或其祖先之一线程组。

17void setDaemon(boolean daemon)

该方法改变该线程组的守护进程状态。

18void setMaxPriority(int pri)

该方法设置组的最大优先级。

19String toString()

此方法返回此线程组的字符串表示形式。

20void uncaughtException(Thread t, Throwable e)

当该线程组中的某个线程由于未捕获的异常而停止,并且该线程没有安装特定的 Thread.UncaughtExceptionHandler 时,Java 虚拟机将调用此方法。

继承的方法

该类继承以下类的方法 -

  • java.lang.Object

示例

以下示例展示了 ThreadGroup 在多线程程序中的用法。

package com.yxjc123;

public class ThreadGroupDemo implements Runnable {
   public static void main(String[] args) {
      ThreadGroupDemo tg = new ThreadGroupDemo();
      tg.func();
   }

   public void func() {
      try {     
         //创建父ThreadGroup
         ThreadGroup pGroup = new ThreadGroup("Parent ThreadGroup");
    
         //为父ThreadGroup创建子ThreadGroup
         ThreadGroup cGroup = new ThreadGroup(pGroup, "Child ThreadGroup");

         //创建一个线程
         Thread t1 = new Thread(pGroup, this);
         System.out.println("Starting " + t1.getName() + "...");
         t1.start();
            
         //创建另一个线程
         Thread t2 = new Thread(cGroup, this);
         System.out.println("Starting " + t2.getName() + "...");
         t2.start();
            
         //显示活动线程数
         System.out.println("Active threads in \"" + pGroup.getName() 
            + "\" = " + pGroup.activeCount());

         // 阻塞直到其他线程完成
         t1.join();
         t2.join();
      } catch (InterruptedException ex) {
         System.out.println(ex.toString());
      }
   }

   // 实现 run()
   public void run() {

      for(int i = 0;i < 1000;i++) {
         i++;
      }
      System.out.println(Thread.currentThread().getName() + " finished executing.");
   }
} 

输出

让我们编译并运行上述程序,将产生以下结果 -

Starting Thread-0...
Starting Thread-1...
Thread-0 finished executing.
Active threads in "Parent ThreadGroup" = 1
Thread-1 finished executing.