Module  java.base
软件包  java.lang

Class ThreadGroup

  • All Implemented Interfaces:
    Thread.UncaughtExceptionHandler


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

    允许线程访问有关其线程组的信息,但不能访问有关其线程组的父线程组或任何其他线程组的信息。

    从以下版本开始:
    1.0
    • 构造方法详细信息

      • ThreadGroup

        public ThreadGroup​(String name)
        构造一个新的线程组。 此新组的父项是当前正在运行的线程的线程组。

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

        参数
        name - 新线程组的名称。
        异常
        SecurityException - 如果当前线程无法在指定的线程组中创建线程。
        从以下版本开始:
        1.0
        另请参见:
        checkAccess()
      • ThreadGroup

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

        checkAccess父线程组的checkAccess方法,没有参数; 这可能会导致安全异常。

        参数
        parent - 父线程组。
        name - 新线程组的名称。
        异常
        NullPointerException - 如果线程组参数是 null
        SecurityException - 如果当前线程无法在指定的线程组中创建线程。
        从以下版本开始:
        1.0
        另请参见:
        SecurityExceptioncheckAccess()
    • 方法详细信息

      • getName

        public final String getName​()
        返回此线程组的名称。
        结果
        该线程组的名称。
        从以下版本开始:
        1.0
      • getParent

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

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

        结果
        这个线程组的父项。 顶级线程组是唯一的线程组,其父级为null
        异常
        SecurityException - 如果当前线程不能修改此线程组。
        从以下版本开始:
        1.0
        另请参见:
        checkAccess()SecurityExceptionRuntimePermission
      • getMaxPriority

        public final int getMaxPriority​()
        返回此线程组的最大优先级。 作为此组的一部分的线程的优先级不能高于最大优先级。
        结果
        此线程组中的线程可以具有的最大优先级。
        从以下版本开始:
        1.0
        另请参见:
        setMaxPriority(int)
      • isDaemon

        public final boolean isDaemon​()
        测试此线程组是否是守护线程组。 守护进程线程组最后一个线程停止或最后一个线程组被销毁时自动销毁。
        结果
        true如果这个线程组是守护线程组; 否则为false
        从以下版本开始:
        1.0
      • isDestroyed

        public boolean isDestroyed​()
        测试此线程组是否已被破坏。
        结果
        如果此对象被销毁,则为true
        从以下版本开始:
        1.1
      • setDaemon

        public final void setDaemon​(boolean daemon)
        更改此线程组的守护程序状态。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

        守护进程线程组最后一个线程停止或最后一个线程组被销毁时自动销毁。

        参数
        daemon - 如果是true ,将该线程组标记为守护线程组; 否则,将该线程组标记为正常。
        异常
        SecurityException - 如果当前线程不能修改此线程组。
        从以下版本开始:
        1.0
        另请参见:
        SecurityExceptioncheckAccess()
      • setMaxPriority

        public final void setMaxPriority​(int pri)
        设置组的最大优先级。 线程组中具有较高优先级的线程不受影响。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

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

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

        参数
        pri - 线程组的新优先级。
        异常
        SecurityException - 如果当前线程不能修改此线程组。
        从以下版本开始:
        1.0
        另请参见:
        getMaxPriority()SecurityExceptioncheckAccess()
      • parentOf

        public final boolean parentOf​(ThreadGroup g)
        测试此线程组是线程组参数还是其祖先线程组之一。
        参数
        g - 一个线程组。
        结果
        true如果此线程组是线程组参数或其祖先线程组之一; 否则为false
        从以下版本开始:
        1.0
      • checkAccess

        public final void checkAccess​()
        确定当前运行的线程是否有权限修改此线程组。

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

        异常
        SecurityException - 如果当前线程不允许访问此线程组。
        从以下版本开始:
        1.0
        另请参见:
        SecurityManager.checkAccess(java.lang.ThreadGroup)
      • activeCount

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

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

        结果
        对该线程组以及将该线程组作为祖先的任何其他线程组中的活动线程数的估计
        从以下版本开始:
        1.0
      • enumerate

        public int enumerate​(Thread[] list)
        将此线程组及其子组中的每个活动线程复制到指定的数组中。

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

        enumerate (list, true)
        参数
        list - 放置线程列表的数组
        结果
        放入数组的线程数
        异常
        SecurityException - 如果 checkAccess确定当前线程无法访问此线程组
        从以下版本开始:
        1.0
      • enumerate

        public int enumerate​(Thread[] list,
                             boolean recurse)
        将此线程组中的每个活动线程复制到指定的数组中。 如果recursetrue ,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。 如果数组太短而不能容纳所有线程,则会忽略额外的线程。

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

        由于本方法中固有的竞争条件,建议该方法仅用于调试和监控。

        参数
        list - 放置线程列表的数组
        recurse - 如果是 true ,递归枚举该线程组的所有子组
        结果
        放入数组的线程数
        异常
        SecurityException - 如果 checkAccess确定当前线程无法访问此线程组
        从以下版本开始:
        1.0
      • activeGroupCount

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

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

        结果
        此线程组作为祖先的活动线程组数
        从以下版本开始:
        1.0
      • enumerate

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

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

        enumerate (list, true)
        参数
        list - 将线程组列表放入的数组
        结果
        线程组的数量放入数组
        异常
        SecurityException - 如果 checkAccess确定当前线程无法访问此线程组
        从以下版本开始:
        1.0
      • enumerate

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

        应用程序可能会使用activeGroupCount方法来估计数组的大小,但是如果数组太短而不能容纳所有线程组,则会忽略额外的线程组。 如果在此线程组中获取每个活动子组非常重要,则调用者应验证返回的int值是否严格小于list的长度。

        由于本方法中固有的竞争条件,建议该方法仅用于调试和监控。

        参数
        list - 放置线程组列表的数组
        recurse - 如果是 true ,递归枚举所有子组
        结果
        线程组的数量放入数组
        异常
        SecurityException - 如果 checkAccess确定当前线程无法访问此线程组
        从以下版本开始:
        1.0
      • stop

        @Deprecated(since="1.2")
        public final void stop​()
        已过时。 这种方法本质上是不安全的。 详见Thread.stop()
        停止此线程组中的所有线程。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

        然后,该方法在该线程组及其所有子组中的所有线程上调用stop方法。

        异常
        SecurityException - 如果当前线程不允许访问此线程组或线程组中的任何线程。
        从以下版本开始:
        1.0
        另请参见:
        SecurityExceptionThread.stop()checkAccess()
      • interrupt

        public final void interrupt​()
        中断此线程组中的所有线程。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

        然后,该方法在该线程组及其所有子组中的所有线程上调用interrupt方法。

        异常
        SecurityException - 如果当前线程不允许访问此线程组或线程组中的任何线程。
        从以下版本开始:
        1.2
        另请参见:
        Thread.interrupt()SecurityExceptioncheckAccess()
      • suspend

        @Deprecated(since="1.2")
        public final void suspend​()
        已过时。 这种方法本质上是死锁的。 详见Thread.suspend()
        暂停此线程组中的所有线程。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

        然后,该方法在该线程组及其所有子组中的所有线程上调用suspend方法。

        异常
        SecurityException - 如果当前线程不允许访问此线程组或线程组中的任何线程。
        从以下版本开始:
        1.0
        另请参见:
        Thread.suspend()SecurityExceptioncheckAccess()
      • resume

        @Deprecated(since="1.2")
        public final void resume​()
        已过时。 这种方法仅与Thread.suspendThreadGroup.suspend一起使用,这两种都已被弃用,因为它们本身就是死锁的。 详见Thread.suspend()
        恢复此线程组中的所有线程。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

        然后,该方法在该线程组及其所有子组中的所有线程上调用resume方法。

        异常
        SecurityException - 如果当前线程不允许访问此线程组或线程组中的任何线程。
        从以下版本开始:
        1.0
        另请参见:
        SecurityExceptionThread.resume()checkAccess()
      • destroy

        public final void destroy​()
        销毁此线程组及其所有子组。 此线程组必须为空,表示此线程组中的所有线程已停止。

        首先,这个线程组的checkAccess方法被调用,没有参数; 这可能会导致安全异常。

        异常
        IllegalThreadStateException - 如果线程组不为空或线程组已被破坏。
        SecurityException - 如果当前线程不能修改此线程组。
        从以下版本开始:
        1.0
        另请参见:
        checkAccess()
      • list

        public void list​()
        将有关此线程组的信息打印到标准输出。 此方法仅适用于调试。
        从以下版本开始:
        1.0
      • uncaughtException

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

        uncaughtException的方法ThreadGroup执行以下操作:

        • 如果此线程组具有父线程组,则使用相同的两个参数调用该父进程的uncaughtException方法。
        • 否则,此方法检查是否安装了一个default uncaught exception handler ,如果是,则使用相同的两个参数调用其uncaughtException方法。
        • 否则,该方法确定是否Throwable参数是的一个实例ThreadDeath 如果是这样,没有什么特别之处。 否则,将使用ThrowableprintStackTrace方法将包含线程名称的消息(从线程的getName方法返回)和堆栈回溯打印到standard error stream

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

        Specified by:
        uncaughtException在接口 Thread.UncaughtExceptionHandler
        参数
        t - 即将退出的线程。
        e - 未捕获的异常。
        从以下版本开始:
        1.0
      • allowThreadSuspension

        @Deprecated(since="1.2")
        public boolean allowThreadSuspension​(boolean b)
        已过时。 此呼叫的定义取决于不推荐使用的suspend() 此外,从未指定此调用的行为。
        由VM用于控制lowmem隐式暂停。
        参数
        b - 允许或不允许暂停的布尔值
        结果
        真正的成功
        从以下版本开始:
        1.1
      • toString

        public String toString​()
        返回此Thread组的字符串表示形式。
        重写:
        toStringObject
        结果
        该线程组的字符串表示形式。
        从以下版本开始:
        1.0