Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络编程

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类引用

Java 有用资源

Java - ThreadGroup 类



ThreadGroup 类

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

ThreadGroup 类声明

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

public class ThreadGroup
   extends Object
      implements Thread.UncaughtExceptionHandler

ThreadGroup 类构造函数

序号 构造函数和描述
1

ThreadGroup(String name)

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

2

ThreadGroup(ThreadGroup parent, String name)

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

ThreadGroup 类方法

序号 方法和描述
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

Java 中 ThreadGroup 类的示例

以下示例展示了在多线程程序中使用 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.
广告