模块 java.base
 java.lang

类 ThreadGroup

java.lang.Object
java.lang.ThreadGroup
所有已实现的接口:
Thread.UncaughtExceptionHandler

public class ThreadGroup extends Object implements Thread.UncaughtExceptionHandler
线程组代表一组线程。此外,一个线程组还可以包含其他线程组。线程组形成一棵树,其中除初始线程组外的每个线程组都有一个父线程组。

线程组有名称和最大优先级。名称在创建组时指定,不能更改。该组的最大优先级是该组中创建的线程的最大优先级。它最初是从父线程组继承的,但可以使用 setMaxPriority 方法进行更改。

线程组弱 reachable 来自其父组,因此当组中没有居住线程时它有资格进行垃圾收集,否则线程组遥不可及.

除非另有说明,否则将 null 参数传递给此类中的构造函数或方法将导致抛出 NullPointerException

线程组和虚拟线程

Java 运行时为 虚拟线程 创建了一个特殊的线程组。在虚拟线程上调用时,该组由 Thread.getThreadGroup 方法返回。该线程组与其他线程组的不同之处在于它的最大优先级是固定的,不能用setMaxPriority 方法改变。虚拟线程不包括在 activeCount 方法返回的估计线程数中,不被 enumerate 方法枚举,并且不被 interrupt 方法中断。
API 注意:
线程组在早期的 Java 版本中提供了一种方法来对线程进行分组并提供一种形式作业控制对于线程。线程组支持小应用程序的隔离和用于诊断目的的定义方法。新应用程序很少会创建线程组并与此 API 交互。
自从:
1.0
  • 构造方法总结

    构造方法
    构造方法
    描述
    构造一个新的线程组。
    ThreadGroup(ThreadGroup parent, String name)
    创建一个新的线程组。
  • 方法总结

    修饰符和类型
    方法
    描述
    int
    返回此线程组及其子组中 居住 平台线程数的估计值。
    int
    返回此线程组及其子组中组数的估计值。
    boolean
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    此方法最初用于在低内存条件下控制暂停。
    final void
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    此方法仅与 安全管理器 结合使用,已弃用并在未来版本中删除。
    final void
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    此方法最初指定用于销毁空线程组。
    int
    enumerate(Thread[] list)
    将此线程组及其子组中的每个 居住 平台线程复制到指定数组中。
    int
    enumerate(Thread[] list, boolean recurse)
    将此线程组中的每个 居住 平台线程复制到指定数组中。
    int
    将对此线程组及其子组中每个子组的引用复制到指定的数组中。
    int
    enumerate(ThreadGroup[] list, boolean recurse)
    将对此线程组中每个子组的引用复制到指定的数组中。
    final int
    返回此线程组的最大优先级。
    final String
    返回此线程组的名称。
    返回此线程组的父级。
    final void
    中断此线程组及其子组中的所有 居住 平台线程。
    final boolean
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    此方法最初指示线程组是否为守护线程组当它的最后一个线程终止时,它会自动销毁。
    boolean
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    此方法最初指示线程组是否被销毁。
    void
    list()
    将有关此线程组的信息打印到标准输出。
    final boolean
    测试此线程组是线程组参数还是其祖先线程组之一。
    final void
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    该方法最初指定用于恢复线程组中的所有线程。
    final void
    setDaemon(boolean daemon)
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    这个方法本来是配置线程组是否是一个守护线程组当它的最后一个线程终止时,它会自动销毁。
    final void
    setMaxPriority(int pri)
    设置组的最大优先级。
    final void
    stop()
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    此方法最初指定用于停止线程组中的所有线程。
    final void
    已弃用,将被删除:此 API 元素可能会在未来版本中删除。
    该方法最初指定为暂停线程组中的所有线程。
    返回此线程组的字符串表示形式。
    void
    当此线程组中的线程由于未捕获的异常而停止并且该线程未安装特定的 Thread.UncaughtExceptionHandler 时,由 Java 虚拟机调用。

    在类 java.lang.Object 中声明的方法

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • 构造方法详细信息

    • ThreadGroup

      public ThreadGroup(String  name)
      构造一个新的线程组。这个新组的父级是当前运行线程的线程组。

      无参调用父线程组的checkAccess方法;这可能会导致安全异常。

      参数:
      name - 新线程组的名称,可以是 null
      抛出:
      SecurityException - 如果当前线程无法在指定的线程组中创建线程。
      参见:
    • ThreadGroup

      public ThreadGroup(ThreadGroup  parent, String  name)
      创建一个新的线程组。这个新组的父级是指定的线程组。

      无参调用父线程组的checkAccess方法;这可能会导致安全异常。

      参数:
      parent - 父线程组。
      name - 新线程组的名称,可以是 null
      抛出:
      SecurityException - 如果当前线程无法在指定的线程组中创建线程。
      参见:
  • 方法详情

    • getName

      public final String  getName()
      返回此线程组的名称。
      返回:
      这个线程组的名字,可能是null
    • getParent

      public final ThreadGroup  getParent()
      返回此线程组的父级。

      首先,如果父线程不是null,则不带参数调用父线程组的checkAccess方法;这可能会导致安全异常。

      返回:
      该线程组的父级。顶级线程组是唯一一个其父级为 null 的线程组。
      抛出:
      SecurityException - 如果当前线程不能修改这个线程组。
      参见:
    • getMaxPriority

      public final int getMaxPriority()
      返回此线程组的最大优先级。这是在线程组中创建的新线程的最大优先级。
      返回:
      在线程组中创建的新线程的最大优先级
      参见:
    • isDaemon

      @Deprecated (since ="16", forRemoval =true) public final boolean isDaemon()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法最初指示线程组是否为守护线程组当它的最后一个线程终止时,它会自动销毁。守护线程组的概念不再存在。当组中没有活动线程并且无法访问时,线程组有资格被 GC 处理。
      返回此线程组的守护进程状态。守护进程状态不用于任何事情。
      返回:
      该线程组的守护进程状态
    • isDestroyed

      @Deprecated (since ="16", forRemoval =true) public boolean isDestroyed()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法最初指示线程组是否被销毁。销毁线程组的能力和销毁线程组的概念不再存在。当组中没有活动线程并且无法访问时,线程组有资格被 GC 处理。
      返回错误。
      返回:
      false
      自从:
      1.1
    • setDaemon

      @Deprecated (since ="16", forRemoval =true) public final void setDaemon(boolean daemon)
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      这个方法本来是配置线程组是否是一个守护线程组当它的最后一个线程终止时,它会自动销毁。守护线程组的概念不再存在。当组中没有活动线程并且无法访问时,线程组有资格被 GC 处理。
      设置此线程组的守护进程状态。守护进程状态不用于任何事情。

      首先,不带参数调用该线程组的checkAccess方法;这可能会导致安全异常。

      参数:
      daemon - 守护进程状态
      抛出:
      SecurityException - 如果当前线程不能修改这个线程组。
      参见:
    • setMaxPriority

      public final void setMaxPriority(int pri)
      设置组的最大优先级。 ThreadGroup for virtual threads 的最大优先级不会被这种方法改变(新的优先级被忽略)。线程组(或子组)中已经具有更高优先级的线程不受此方法的影响。

      首先,不带参数调用该线程组的checkAccess方法;这可能会导致安全异常。

      如果 pri 参数小于 Thread.MIN_PRIORITY 或大于 Thread.MAX_PRIORITY ,则该组的最大优先级保持不变。

      否则,此 ThreadGroup 对象的优先级设置为指定的 pri 和此线程组父级的最大允许优先级中的较小者。 (如果这个线程组是系统线程组,没有父线程,那么它的最大优先级简单地设置为 pri 。)然后递归调用这个方法,以 pri 作为它的参数,对于属于这个线程组的每个线程组.

      参数:
      pri - 线程组的新优先级。
      抛出:
      SecurityException - 如果当前线程不能修改这个线程组。
      参见:
    • parentOf

      public final boolean parentOf(ThreadGroup  g)
      测试此线程组是线程组参数还是其祖先线程组之一。
      参数:
      g - 一个线程组,可以是 null
      返回:
      true 如果此线程组是线程组参数或其祖先线程组之一; false否则。
    • checkAccess

      @Deprecated (since ="17", forRemoval =true) public final void checkAccess()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法仅与 安全管理器 结合使用,已弃用并在未来版本中删除。因此,此方法也已弃用并可能被删除。安全管理器或此方法没有替代品。
      确定当前运行的线程是否有权修改此线程组。

      如果有一个安全管理器,它的 checkAccess 方法被调用,这个线程组作为它的参数。这可能会导致抛出 SecurityException

      抛出:
      SecurityException - 如果不允许当前线程访问该线程组。
      参见:
    • activeCount

      public int activeCount()
      返回此线程组及其子组中 居住 平台线程数的估计值。估计中不包括虚拟线程。此方法递归迭代此线程组中的所有子组。

      返回的值只是一个估计值,因为当此方法遍历内部数据结构时线程数可能会动态变化,并且可能会受到某些系统线程存在的影响。此方法主要用于调试和监视目的。

      返回:
      估计此线程组和任何其他以该线程组为祖先的线程组中的活动线程数
    • enumerate

      public int enumerate(Thread [] list)
      将此线程组及其子组中的每个 居住 平台线程复制到指定数组中。此方法不枚举虚拟线程。

      此方法的调用与调用的行为完全相同

      enumerate (list, true)
      参数:
      list - 用于放置线程列表的数组
      返回:
      放入数组的线程数
      抛出:
      SecurityException - 如果checkAccess确定当前线程不能访问这个线程组
    • enumerate

      public int enumerate(Thread [] list, boolean recurse)
      将此线程组中的每个 居住 平台线程复制到指定数组中。此方法不枚举虚拟线程。如果 recursetrue ,此方法递归地枚举此线程组的所有子组,并且还包括对这些子组中每个实时平台线程的引用。如果数组太短无法容纳所有线程,则多余的线程将被忽略。

      然而,应用程序可能会使用 activeCount 方法来估计数组的大小如果数组太短无法容纳所有线程,则多余的线程将被忽略。如果获取此线程组中的每个活动线程至关重要,则调用者应验证返回的 int 值是否严格小于 list 的长度。

      由于此方法中固有的竞争条件,建议仅将此方法用于调试和监视目的。

      参数:
      list - 用于放置线程列表的数组
      recurse - 如果是 true ,则递归枚举此线程组的所有子组
      返回:
      放入数组的线程数
      抛出:
      SecurityException - 如果checkAccess确定当前线程不能访问这个线程组
    • activeGroupCount

      public int activeGroupCount()
      返回此线程组及其子组中组数的估计值。递归迭代此线程组中的所有子组。

      返回的值只是一个估计值,因为当此方法遍历内部数据结构时,线程组的数量可能会动态变化。此方法主要用于调试和监视目的。

      返回:
      以此线程组为祖先的线程组的数量
    • enumerate

      public int enumerate(ThreadGroup [] list)
      将对此线程组及其子组中每个子组的引用复制到指定的数组中。

      此方法的调用与调用的行为完全相同

      enumerate (list, true)
      参数:
      list - 用于放置线程组列表的数组
      返回:
      放入数组的线程组数
      抛出:
      SecurityException - 如果checkAccess确定当前线程不能访问这个线程组
    • enumerate

      public int enumerate(ThreadGroup [] list, boolean recurse)
      将对此线程组中每个子组的引用复制到指定的数组中。如果 recursetrue ,此方法递归地枚举此线程组的所有子组,并且还包括对这些子组中每个线程组的引用。

      应用程序可能会使用 activeGroupCount 方法来估计数组应该有多大,但是如果数组太短无法容纳所有线程组,则多余的线程组将被忽略。如果获取此线程组中的每个子组至关重要,则调用者应验证返回的 int 值是否严格小于 list 的长度。

      由于此方法中固有的竞争条件,建议仅将此方法用于调试和监视目的。

      参数:
      list - 用于放置线程组列表的数组
      recurse - 如果 true ,递归枚举所有子组
      返回:
      放入数组的线程组数
      抛出:
      SecurityException - 如果checkAccess确定当前线程不能访问这个线程组
    • stop

      @Deprecated (since ="1.2", forRemoval =true) public final void stop()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法最初指定用于停止线程组中的所有线程。它本质上是不安全的。
      抛出 UnsupportedOperationException
    • interrupt

      public final void interrupt()
      中断此线程组及其子组中的所有 居住 平台线程。
      抛出:
      SecurityException - 如果不允许当前线程访问此线程组或线程组中的任何线程。
      自从:
      1.2
      参见:
    • suspend

      @Deprecated (since ="1.2", forRemoval =true) public final void suspend()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      该方法最初指定为暂停线程组中的所有线程。
      抛出 UnsupportedOperationException
    • resume

      @Deprecated (since ="1.2", forRemoval =true) public final void resume()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      该方法最初指定用于恢复线程组中的所有线程。
      抛出 UnsupportedOperationException
    • destroy

      @Deprecated (since ="16", forRemoval =true) public final void destroy()
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法最初指定用于销毁空线程组。显式销毁线程组的能力不再存在。当组中没有活动线程并且无法访问时,线程组有资格被 GC 处理。
      什么也没做。
    • list

      public void list()
      将有关此线程组的信息打印到标准输出。此方法仅对调试有用。
    • uncaughtException

      public void uncaughtException(Thread  t, Throwable  e)
      当此线程组中的线程由于未捕获的异常而停止并且该线程未安装特定的 Thread.UncaughtExceptionHandler 时,由 Java 虚拟机调用。

      ThreadGroupuncaughtException 方法执行以下操作:

      • 如果此线程组有父线程组,则使用相同的两个参数调用该父线程组的 uncaughtException 方法。
      • 否则,此方法检查是否安装了 默认未捕获的异常处理程序,如果安装了,则使用相同的两个参数调用其 uncaughtException 方法。
      • 否则,包含线程名称的消息(从线程的 getName 方法返回)和堆栈回溯(使用 ThrowableprintStackTrace 方法)被打印到 标准错误流

      应用程序可以在 ThreadGroup 的子类中覆盖此方法,以提供对未捕获异常的替代处理。

      指定者:
      uncaughtException 在接口 Thread.UncaughtExceptionHandler
      参数:
      t - 即将退出的线程。
      e - 未捕获的异常。
    • allowThreadSuspension

      @Deprecated (since ="1.2", forRemoval =true) public boolean allowThreadSuspension(boolean b)
      已弃用,将被删除:此 API 元素可能会在未来版本中删除。
      此方法最初用于在低内存条件下控制暂停。它从未被指定。
      什么也没做。
      参数:
      b - 忽略
      返回:
      false
      自从:
      1.1
    • toString

      public String  toString()
      返回此线程组的字符串表示形式。
      重写:
      toString 在类 Object
      返回:
      此线程组的字符串表示形式。