- java.lang.Object
-
- java.lang.ThreadGroup
-
- 实现的所有接口
-
Thread.UncaughtExceptionHandler
public class ThreadGroup extends Object implements Thread.UncaughtExceptionHandler
线程组表示一组线程。 此外,线程组还可以包括其他线程组。 线程组形成一个树,其中除初始线程组之外的每个线程组都有父节点。允许线程访问有关其自己的线程组的信息,但不允许访问有关其线程组的父线程组或任何其他线程组的信息。
- 从以下版本开始:
- 1.0
-
-
构造方法摘要
构造方法 构造器 描述 ThreadGroup(String name)构造一个新的线程组。ThreadGroup(ThreadGroup parent, String name)创建一个新的线程组。
-
方法摘要
所有方法 实例方法 具体的方法 弃用的方法 变量和类型 方法 描述 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一起使用,这两种方法都已弃用,因为它们本身就容易出现死锁。voidsetDaemon(boolean daemon)更改此线程组的守护程序状态。voidsetMaxPriority(int pri)设置组的最大优先级。voidstop()已过时。这种方法本质上是不安全的。voidsuspend()已过时。此方法本身就容易出现死锁。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此线程组的checkAccess方法,不带参数; 这可能会导致安全异常。守护程序线程组在其最后一个线程停止或其最后一个线程组被销毁时会自动销毁。
- 参数
-
daemon- 如果为true,则将此线程组标记为守护程序线程组; 否则,将此线程组标记为正常。 - 异常
-
SecurityException- 如果当前线程无法修改此线程组。 - 从以下版本开始:
- 1.0
- 另请参见:
-
SecurityException,checkAccess()
-
setMaxPriority
public final void setMaxPriority(int pri)
设置组的最大优先级。 线程组中已具有更高优先级的线程不受影响。首先,
checkAccess此线程组的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()
Deprecated.This method is inherently unsafe. SeeThread.stop()for details.停止此线程组中的所有线程。首先,
checkAccess此线程组的checkAccess方法,不带参数; 这可能会导致安全异常。然后,此方法在此线程组及其所有子组中的所有线程上调用
stop方法。- 异常
-
SecurityException- 如果不允许当前线程访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.0
- 另请参见:
-
SecurityException,Thread.stop(),checkAccess()
-
interrupt
public final void interrupt()
中断此线程组中的所有线程。首先,
checkAccess此线程组的checkAccess方法,不带参数; 这可能会导致安全异常。然后,此方法在此线程组及其所有子组中的所有线程上调用
interrupt方法。- 异常
-
SecurityException- 如果不允许当前线程访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.2
- 另请参见:
-
Thread.interrupt(),SecurityException,checkAccess()
-
suspend
@Deprecated(since="1.2") public final void suspend()
Deprecated.This method is inherently deadlock-prone. SeeThread.suspend()for details.挂起此线程组中的所有线程。首先,
checkAccess此线程组的checkAccess方法,不带参数; 这可能会导致安全异常。然后,此方法在此线程组及其所有子组中的所有线程上调用
suspend方法。- 异常
-
SecurityException- 如果不允许当前线程访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.0
- 另请参见:
-
Thread.suspend(),SecurityException,checkAccess()
-
resume
@Deprecated(since="1.2") public final void resume()
Deprecated.This method is used solely in conjunction withThread.suspendandThreadGroup.suspend, both of which have been deprecated, as they are inherently deadlock-prone. SeeThread.suspend()for details.恢复此线程组中的所有线程。首先,
checkAccess此线程组的checkAccess方法,不带参数; 这可能会导致安全异常。然后,此方法在此线程组及其所有子组中的所有线程上调用
resume方法。- 异常
-
SecurityException- 如果不允许当前线程访问此线程组或线程组中的任何线程。 - 从以下版本开始:
- 1.0
- 另请参见:
-
SecurityException,Thread.resume(),checkAccess()
-
destroy
public final void destroy()
销毁此线程组及其所有子组。 此线程组必须为空,表示此线程组中的所有线程都已停止。首先,
checkAccess此线程组的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。 如果是这样,没有什么特别的。 否则,包含该线程的名称的消息,如从线程的返回getName方法,以及在堆栈中,使用Throwable的printStackTrace方法,打印到standard error stream 。
应用程序可以在
ThreadGroup子类中覆盖此方法,以提供对未捕获异常的替代处理。- Specified by:
-
uncaughtException在接口Thread.UncaughtExceptionHandler - 参数
-
t- 即将退出的线程。 -
e- 未捕获的异常。 - 从以下版本开始:
- 1.0
- 如果此线程组具有父线程组,则使用相同的两个参数调用该父线程的
-
allowThreadSuspension
@Deprecated(since="1.2") public boolean allowThreadSuspension(boolean b)
Deprecated.The definition of this call depends onsuspend(), which is deprecated. Further, the behavior of this call was never specified.由VM用于控制lowmem隐式挂起。- 参数
-
b- 允许或禁止暂停的布尔值 - 结果
- 成功的真实
- 从以下版本开始:
- 1.1
-
-