- java.lang.Object
-
- java.lang.ThreadGroup
-
- All Implemented Interfaces:
-
Thread.UncaughtExceptionHandler
public class ThreadGroup extends Object implements Thread.UncaughtExceptionHandler
线程组代表一组线程。 此外,线程组还可以包括其他线程组。 线程组形成一个树,除了初始线程组之外,每个线程组都有一个父进程。允许线程访问有关其线程组的信息,但不能访问有关其线程组的父线程组或任何其他线程组的信息。
- 从以下版本开始:
- 1.0
-
-
构造方法摘要
构造方法 Constructor 描述 ThreadGroup(String name)构造一个新的线程组。ThreadGroup(ThreadGroup parent, String name)创建一个新的线程组。
-
方法摘要
所有方法 接口方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 intactiveCount()返回此线程组及其子组中活动线程数的估计。intactiveGroupCount()返回此线程组及其子组中活动组数的估计。booleanallowThreadSuspension(boolean b)已过时。此呼叫的定义取决于suspend(),已被弃用。 此外,从未指定此调用的行为。voidcheckAccess()确定当前运行的线程是否有权限修改此线程组。voiddestroy()销毁此线程组及其所有子组。intenumerate(Thread[] list)将此线程组及其子组中的每个活动线程复制到指定的数组中。intenumerate(Thread[] list, boolean recurse)将此线程组中的每个活动线程复制到指定的数组中。intenumerate(ThreadGroup[] list)复制到该线程组及其子组中每个活动子组的指定数组引用。intenumerate(ThreadGroup[] list, boolean recurse)复制到该线程组中每个活动子组的指定数组引用。intgetMaxPriority()返回此线程组的最大优先级。StringgetName()返回此线程组的名称。ThreadGroupgetParent()返回此线程组的父级。voidinterrupt()中断此线程组中的所有线程。booleanisDaemon()测试此线程组是否是守护线程组。booleanisDestroyed()测试此线程组是否已被破坏。voidlist()将有关此线程组的信息打印到标准输出。booleanparentOf(ThreadGroup g)测试此线程组是线程组参数还是其祖先线程组之一。voidresume()已过时。这种方法仅与Thread.suspend和ThreadGroup.suspend一起使用,因为它们本质上是死锁易发生的,因为它们已经被弃用。 详见Thread.suspend()。voidsetDaemon(boolean daemon)更改此线程组的守护程序状态。voidsetMaxPriority(int pri)设置组的最大优先级。voidstop()已过时。这种方法本质上是不安全的。 详见Thread.stop()。voidsuspend()已过时。这种方法本质上是死锁的。 详见Thread.suspend()。StringtoString()返回此Thread组的字符串表示形式。voiduncaughtException(Thread t, Throwable e)当该线程组中的线程由于未捕获的异常而停止时,由Java虚拟机调用,并且线程没有安装特定的Thread.UncaughtExceptionHandler。
-
-
-
构造方法详细信息
-
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
- 另请参见:
-
SecurityException,checkAccess()
-
-
方法详细信息
-
getName
public final String getName()
返回此线程组的名称。- 结果
- 该线程组的名称。
- 从以下版本开始:
- 1.0
-
getParent
public final ThreadGroup getParent()
返回此线程组的父级。首先,如果父对象不是
null,则调用父线程组的checkAccess方法,不带参数; 这可能会导致安全异常。- 结果
-
这个线程组的父项。
顶级线程组是唯一的线程组,其父级为
null。 - 异常
-
SecurityException- 如果当前线程不能修改此线程组。 - 从以下版本开始:
- 1.0
- 另请参见:
-
checkAccess(),SecurityException,RuntimePermission
-
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
- 另请参见:
-
SecurityException,checkAccess()
-
setMaxPriority
public final void setMaxPriority(int pri)
设置组的最大优先级。 线程组中具有较高优先级的线程不受影响。首先,这个线程组的
checkAccess方法被调用,没有参数; 这可能会导致安全异常。如果
pri参数小于Thread.MIN_PRIORITY或大于Thread.MAX_PRIORITY,则组的最大优先级保持不变。否则,此ThreadGroup对象的优先级设置为指定的
pri的较小者以及此线程组的父级的最大允许优先级。 (如果该线程组是没有父级的系统线程组,则其最大优先级被简单地设置为pri。然后,这个方法被递归地调用,对于属于此线程组的每个线程组,以pri作为参数。- 参数
-
pri- 线程组的新优先级。 - 异常
-
SecurityException- 如果当前线程不能修改此线程组。 - 从以下版本开始:
- 1.0
- 另请参见:
-
getMaxPriority(),SecurityException,checkAccess()
-
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)
- 参数
-
list- 放置线程列表的数组 - 结果
- 放入数组的线程数
- 异常
-
SecurityException- 如果 checkAccess确定当前线程无法访问此线程组 - 从以下版本开始:
- 1.0
-
enumerate
public int enumerate(Thread[] list, boolean recurse)
将此线程组中的每个活动线程复制到指定的数组中。 如果recurse为true,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。 如果数组太短而不能容纳所有线程,则会忽略额外的线程。应用程序可能会使用activeCount方法来估计数组的大小,但是如果数组太短而不能容纳所有线程,则会忽略额外的线程。 如果在此线程组中获取每个活动线程至关重要,则调用者应验证返回的int值是否严格小于
list的长度。由于本方法中固有的竞争条件,建议该方法仅用于调试和监控。
- 参数
-
list- 放置线程列表的数组 -
recurse- 如果是true,递归枚举该线程组的所有子组 - 结果
- 放入数组的线程数
- 异常
-
SecurityException- 如果 checkAccess确定当前线程无法访问此线程组 - 从以下版本开始:
- 1.0
-
activeGroupCount
public int activeGroupCount()
返回此线程组及其子组中活动组数的估计。 递归迭代此线程组中的所有子组。返回的值只是一个估计,因为线程组的数量可能会在此方法遍历内部数据结构时动态更改。 此方法主要用于调试和监视。
- 结果
- 此线程组作为祖先的活动线程组数
- 从以下版本开始:
- 1.0
-
enumerate
public int enumerate(ThreadGroup[] list)
- 参数
-
list- 将线程组列表放入的数组 - 结果
- 线程组的数量放入数组
- 异常
-
SecurityException- 如果 checkAccess确定当前线程无法访问此线程组 - 从以下版本开始:
- 1.0
-
enumerate
public int enumerate(ThreadGroup[] list, boolean recurse)
复制到该线程组中每个活动子组的指定数组引用。 如果recurse是true,则该方法递归枚举该线程组的所有子组,并且还包括对这些子组中每个活动线程组的引用。应用程序可能会使用activeGroupCount方法来估计数组的大小,但是如果数组太短而不能容纳所有线程组,则会忽略额外的线程组。 如果在此线程组中获取每个活动子组非常重要,则调用者应验证返回的int值是否严格小于
list的长度。由于本方法中固有的竞争条件,建议该方法仅用于调试和监控。
- 参数
-
list- 放置线程组列表的数组 -
recurse- 如果是true,递归枚举所有子组 - 结果
- 线程组的数量放入数组
- 异常
-
SecurityException- 如果 checkAccess确定当前线程无法访问此线程组 - 从以下版本开始:
- 1.0
-
stop
@Deprecated(since="1.2") public final void stop()
停止此线程组中的所有线程。首先,这个线程组的
checkAccess方法被调用,没有参数; 这可能会导致安全异常。然后,该方法在该线程组及其所有子组中的所有线程上调用
stop方法。- 异常
-
SecurityException- 如果当前线程不允许访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.0
- 另请参见:
-
SecurityException,Thread.stop(),checkAccess()
-
interrupt
public final void interrupt()
中断此线程组中的所有线程。首先,这个线程组的
checkAccess方法被调用,没有参数; 这可能会导致安全异常。然后,该方法在该线程组及其所有子组中的所有线程上调用
interrupt方法。- 异常
-
SecurityException- 如果当前线程不允许访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.2
- 另请参见:
-
Thread.interrupt(),SecurityException,checkAccess()
-
suspend
@Deprecated(since="1.2") public final void suspend()
暂停此线程组中的所有线程。首先,这个线程组的
checkAccess方法被调用,没有参数; 这可能会导致安全异常。然后,该方法在该线程组及其所有子组中的所有线程上调用
suspend方法。- 异常
-
SecurityException- 如果当前线程不允许访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.0
- 另请参见:
-
Thread.suspend(),SecurityException,checkAccess()
-
resume
@Deprecated(since="1.2") public final void resume()
恢复此线程组中的所有线程。首先,这个线程组的
checkAccess方法被调用,没有参数; 这可能会导致安全异常。然后,该方法在该线程组及其所有子组中的所有线程上调用
resume方法。- 异常
-
SecurityException- 如果当前线程不允许访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.0
- 另请参见:
-
SecurityException,Thread.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。 如果是这样,没有什么特别之处。 否则,将使用Throwable的printStackTrace方法将包含线程名称的消息(从线程的getName方法返回)和堆栈回溯打印到standard error stream 。
应用程序可以在
ThreadGroup子类中覆盖此方法,以提供未捕获异常的替代处理。- Specified by:
-
uncaughtException在接口Thread.UncaughtExceptionHandler - 参数
-
t- 即将退出的线程。 -
e- 未捕获的异常。 - 从以下版本开始:
- 1.0
- 如果此线程组具有父线程组,则使用相同的两个参数调用该父进程的
-
allowThreadSuspension
@Deprecated(since="1.2") public boolean allowThreadSuspension(boolean b)
由VM用于控制lowmem隐式暂停。- 参数
-
b- 允许或不允许暂停的布尔值 - 结果
- 真正的成功
- 从以下版本开始:
- 1.1
-
-