Java - ThreadGroup 类



介绍

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

类声明

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

public class ThreadGroup
   extends Object
      implements Thread.UncaughtExceptionHandler

类构造函数

序号 构造函数及描述
1

ThreadGroup(String name)

此构造函数创建一个新的线程组。

2

ThreadGroup(ThreadGroup parent, String name)

此构造函数创建一个新的线程组。

类方法

序号 方法及描述
1 int activeCount()

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

2 int activeGroupCount()

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

3 void checkAccess()

此方法确定当前正在运行的线程是否有权修改此线程组。

4 void destroy()

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

5 int enumerate(Thread[] list)

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

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

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

7 int enumerate(ThreadGroup[] list)

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

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

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

9 int getMaxPriority()

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

10 String getName()

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

11 ThreadGroup getParent()

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

12 void interrupt()

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

13 boolean isDaemon()

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

14 boolean isDestroyed()

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

15 void list()

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

16 boolean parentOf(ThreadGroup g)

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

17 void setDaemon(boolean daemon)

此方法更改此线程组的守护进程状态。

18 void setMaxPriority(int pri)

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

19 String toString()

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

20 void uncaughtException(Thread t, Throwable e)

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

继承的方法

此类继承自以下类的方法:

  • java.lang.Object

使用 ThreadGroups 对线程进行分组的示例

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

package com.tutorialspoint;

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

   public void func() {
      try {     
         // create a parent ThreadGroup
         ThreadGroup pGroup = new ThreadGroup("Parent ThreadGroup");
    
         // create a child ThreadGroup for parent ThreadGroup
         ThreadGroup cGroup = new ThreadGroup(pGroup, "Child ThreadGroup");

         // create a thread
         Thread t1 = new Thread(pGroup, this);
         System.out.println("Starting " + t1.getName() + "...");
         t1.start();
            
         // create another thread
         Thread t2 = new Thread(cGroup, this);
         System.out.println("Starting " + t2.getName() + "...");
         t2.start();
            
         // display the number of active threads 
         System.out.println("Active threads in \"" + pGroup.getName() 
            + "\" = " + pGroup.activeCount());

         // block until the other threads finish
         t1.join();
         t2.join();
      } catch (InterruptedException ex) {
         System.out.println(ex.toString());
      }
   }

   // implements 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.
广告