Java 简明教程

Java - ThreadGroup Class

ThreadGroup Class

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

ThreadGroup Class Declaration

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

public class ThreadGroup
   extends Object
      implements Thread.UncaughtExceptionHandler

ThreadGroup Class Constructors

Sr.No.

Constructor & Description

1

ThreadGroup(String name) 用于构造新的线程组。

2

ThreadGroup(ThreadGroup parent, String name) 用于创建新的线程组。

ThreadGroup Class Methods

Sr.No.

Method & Description

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) 此方法由 Java 虚拟机调用,当此线程组中某个线程因未捕获的异常而停止,且该线程没有安装特定 Thread.UncaughtExceptionHandler 时。

Methods Inherited

此类从以下类中继承方法:

  1. java.lang.Object

Example of ThreadGroup Class in Java

以下示例展示了在多线程程序中使用 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.");
   }
}

Output

让我们编译并运行上述程序,这将生成以下结果 −

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