- 所有已实现的接口:
-
Thread.UncaughtExceptionHandler
线程组有一个名称和最大优先级。名称在创建组时指定,不能更改。组的最大优先级是在组中创建线程的最大优先级。最初从父线程组继承,但可以使用setMaxPriority
方法进行更改。
线程组从其父组弱引用,因此当组中没有活动线程且线程组在其他方面不可达时,它就有资格进行垃圾回收。
除非另有说明,在此类中将null
参数传递给构造函数或方法将导致抛出NullPointerException
。
线程组和虚拟线程
Java运行时为虚拟线程创建了一个特殊的线程组。当在虚拟线程上调用Thread.getThreadGroup
方法时,将返回此组。该线程组与其他线程组不同,其最大优先级是固定的,无法使用setMaxPriority
方法更改。虚拟线程不包括在activeCount
方法返回的估计线程计数中,不会被enumerate
方法枚举,并且不会被interrupt
方法中断。
- API注释:
- 线程组在早期Java版本中提供了一种将线程分组并为线程提供一种形式的作业控制的方式。线程组支持隔离小程序,并定义了用于诊断目的的方法。新应用程序很少需要创建ThreadGroups并与此API交互。
- 自:
- 1.0
-
Constructor Summary
ConstructorDescriptionThreadGroup
(String name) 构造一个新的线程组。ThreadGroup
(ThreadGroup parent, String name) 创建一个新的线程组。 -
Method Summary
Modifier and TypeMethodDescriptionint
返回此线程组及其子组中活动平台线程的估计数量。int
返回此线程组及其子组中组的估计数量。final void
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法仅在与安全管理器一起使用时有用,安全管理器已被弃用并可能在将来的版本中被移除。final void
destroy()
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初用于销毁空线程组。int
将此线程组及其子组中的每个活动平台线程复制到指定的数组中。int
将此线程组中的每个活动平台线程复制到指定的数组中。int
enumerate
(ThreadGroup[] list) 将此线程组及其子组中的每个子组的引用复制到指定的数组中。int
enumerate
(ThreadGroup[] list, boolean recurse) 将此线程组中的每个子组的引用复制到指定的数组中。final int
返回此线程组的最大优先级。final String
getName()
返回此线程组的名称。final ThreadGroup
返回此线程组的父线程组。final void
中断此线程组及其子组中的所有活动平台线程。final boolean
isDaemon()
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初指示线程组是否为守护线程组,当其最后一个线程终止时自动销毁。boolean
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初指示线程组是否已销毁。void
list()
将有关此线程组的信息打印到标准输出。final boolean
测试此线程组是否为线程组参数或其祖先线程组之一。final void
resume()
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初指定恢复线程组中的所有线程。final void
setDaemon
(boolean daemon) 已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初配置线程组是否为守护线程组,当其最后一个线程终止时自动销毁。final void
setMaxPriority
(int pri) 设置组的最大优先级。final void
stop()
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初指定停止线程组中的所有线程。final void
suspend()
已弃用,将被移除: 此API元素可能在将来的版本中被移除。此方法最初指定挂起线程组中的所有线程。toString()
返回此线程组的字符串表示形式。void
uncaughtException
(Thread t, Throwable e) 当此线程组中的线程因未捕获的异常而停止,并且线程没有安装特定的Thread.UncaughtExceptionHandler
时,Java虚拟机将调用此方法。
-
Constructor Details
-
ThreadGroup
构造一个新的线程组。此新组的父组是当前运行线程的线程组。调用父线程组的
checkAccess
方法,不带参数;这可能导致安全异常。- 参数:
-
name
- 新线程组的名称,可以为null
- 抛出:
-
SecurityException
- 如果当前线程无法在指定的线程组中创建线程。 - 参见:
-
ThreadGroup
创建一个新的线程组。此新组的父组是指定的线程组。调用父线程组的
checkAccess
方法,不带参数;这可能导致安全异常。- 参数:
-
parent
- 父线程组。 -
name
- 新线程组的名称,可以为null
- 抛出:
-
SecurityException
- 如果当前线程无法在指定的线程组中创建线程。 - 参见:
-
-
Method Details
-
getName
返回此线程组的名称。- 返回:
-
此线程组的名称,可能为
null
-
getParent
返回此线程组的父组。首先,如果父组不为
null
,则调用父线程组的checkAccess
方法,不带参数;这可能导致安全异常。- 返回:
-
此线程组的父组。顶级线程组是唯一一个其父组为
null
的线程组。 - 抛出:
-
SecurityException
- 如果当前线程无法修改此线程组。 - 参见:
-
getMaxPriority
public final int getMaxPriority()返回此线程组的最大优先级。这是在线程组中创建新线程的最大优先级。- 返回:
- 在线程组中创建新线程的最大优先级
- 参见:
-
isDaemon
Deprecated, for removal: This API element is subject to removal in a future version.This method originally indicated if the thread group is a daemon thread group that is automatically destroyed when its last thread terminates. The concept of daemon thread group no longer exists. A thread group is eligible to be GC'ed when there are no live threads in the group and it is otherwise unreachable.返回此线程组的守护状态。守护状态不会被用于任何操作。- 返回:
- 此线程组的守护状态
-
isDestroyed
Deprecated, for removal: This API element is subject to removal in a future version.This method originally indicated if the thread group is destroyed. The ability to destroy a thread group and the concept of a destroyed thread group no longer exists. A thread group is eligible to be GC'ed when there are no live threads in the group and it is otherwise unreachable.返回false。- 返回:
- false
- 自:
- 1.1
-
setDaemon
Deprecated, for removal: This API element is subject to removal in a future version.This method originally configured whether the thread group is a daemon thread group that is automatically destroyed when its last thread terminates. The concept of daemon thread group no longer exists. A thread group is eligible to be GC'ed when there are no live threads in the group and it is otherwise unreachable.设置此线程组的守护状态。守护状态不会被用于任何操作。首先,调用此线程组的
checkAccess
方法,不带参数;这可能导致安全异常。- 参数:
-
daemon
- 守护状态 - 抛出:
-
SecurityException
- 如果当前线程无法修改此线程组。 - 参见:
-
setMaxPriority
public final void setMaxPriority(int pri) 设置线程组的最大优先级。对于虚拟线程的ThreadGroup的最大优先级不会被此方法更改(新优先级将被忽略)。已经具有更高优先级的线程组(或子组)中的线程不受此方法的影响。首先,调用此线程组的
checkAccess
方法,不带参数;这可能导致安全异常。如果
pri
参数小于Thread.MIN_PRIORITY
或大于Thread.MAX_PRIORITY
,则线程组的最大优先级保持不变。否则,将此ThreadGroup对象的优先级设置为指定
pri
和此线程组的父级的最大允许优先级中较小的一个。(如果此线程组是系统线程组,没有父级,则其最大优先级简单地设置为pri
。)然后递归调用此方法,对属于此线程组的每个线程组使用pri
作为其参数。- 参数:
-
pri
- 线程组的新优先级。 - 抛出:
-
SecurityException
- 如果当前线程无法修改此线程组。 - 参见:
-
parentOf
测试此线程组是否是线程组参数或其祖先线程组之一。- 参数:
-
g
- 一个线程组,可以为null
- 返回:
-
如果此线程组是线程组参数或其祖先线程组之一,则返回
true
;否则返回false
。
-
checkAccess
Deprecated, for removal: This API element is subject to removal in a future version.This method is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this method is also deprecated and subject to removal. There is no replacement for the Security Manager or this method.确定当前运行的线程是否有权限修改此线程组。如果存在安全管理器,则调用其
checkAccess
方法,并将此线程组作为参数传递。这可能导致抛出SecurityException
。- 抛出:
-
SecurityException
- 如果当前线程不允许访问此线程组。 - 参见:
-
activeCount
public int activeCount()返回此线程组及其子组中的活动平台线程的估计数量。此方法递归地遍历此线程组中的所有子组。返回的值仅是一个估计值,因为线程的数量可能在此方法遍历内部数据结构时动态更改,并且可能受到某些系统线程的影响。此方法主要用于调试和监控目的。
- 返回:
- 此线程组及具有此线程组作为祖先的任何其他线程组中活动线程的估计值
-
enumerate
- 参数:
-
list
- 用于放置线程列表的数组 - 返回:
- 放入数组的线程数
- 抛出:
-
SecurityException
- 如果checkAccess确定当前线程无法访问此线程组
-
enumerate
将此线程组中的每个活动平台线程复制到指定的数组中。此方法不枚举虚拟线程。如果recurse
为true
,此方法递归枚举此线程组的所有子组,并且这些子组中的每个活动平台线程的引用也包括在内。如果数组太短而无法容纳所有线程,则额外的线程将被静默忽略。应用程序可以使用activeCount方法来估计数组应该有多大,但是如果数组太短而无法容纳所有线程,则额外的线程将被静默忽略。如果关键是获取此线程组中的每个活动线程,则调用方应验证返回的int值严格小于
list
的长度。由于此方法中存在固有的竞争条件,建议仅将该方法用于调试和监控目的。
- 参数:
-
list
- 用于放置线程列表的数组 -
recurse
- 如果为true
,递归枚举此线程组的所有子组 - 返回:
- 放入数组的线程数
- 抛出:
-
SecurityException
- 如果checkAccess确定当前线程无法访问此线程组
-
activeGroupCount
public int activeGroupCount()返回此线程组及其子组中的组数的估计值。递归遍历此线程组中的所有子组。返回的值仅是一个估计值,因为线程组的数量可能在此方法遍历内部数据结构时动态更改。此方法主要用于调试和监控目的。
- 返回:
- 具有此线程组作为祖先的线程组数
-
enumerate
将此线程组及其子组中的每个子组的引用复制到指定的数组中。调用此方法的行为与调用
enumerate
(list, true)
- 参数:
-
list
- 用于放置线程组列表的数组 - 返回:
- 放入数组的线程组数
- 抛出:
-
SecurityException
- 如果checkAccess确定当前线程无法访问此线程组
-
enumerate
将此线程组中的每个子组的引用复制到指定的数组中。如果recurse
为true
,此方法递归枚举此线程组的所有子组,并且这些子组中的每个线程组的引用也包括在内。应用程序可以使用activeGroupCount方法来估计数组应该有多大,但是如果数组太短而无法容纳所有线程组,则额外的线程组将被静默忽略。如果关键是获取此线程组中的每个子组,则调用方应验证返回的int值严格小于
list
的长度。由于此方法中存在固有的竞争条件,建议仅将该方法用于调试和监控目的。
- 参数:
-
list
- 用于放置线程组列表的数组 -
recurse
- 如果为true
,递归枚举所有子组 - 返回:
- 放入数组的线程组数
- 抛出:
-
SecurityException
- 如果checkAccess确定当前线程无法访问此线程组
-
stop
Deprecated, for removal: This API element is subject to removal in a future version.This method was originally specified to stop all threads in the thread group. It was inherently unsafe.抛出UnsupportedOperationException
。 -
interrupt
public final void interrupt()中断此线程组及其子组中的所有活动平台线程。- 抛出:
-
SecurityException
- 如果当前线程不允许访问此线程组或线程组中的任何线程。 - 自:
- 1.2
- 参见:
-
suspend
Deprecated, for removal: This API element is subject to removal in a future version.This method was originally specified to suspend all threads in the thread group.抛出UnsupportedOperationException
。 -
resume
Deprecated, for removal: This API element is subject to removal in a future version.This method was originally specified to resume all threads in the thread group.抛出UnsupportedOperationException
。 -
destroy
Deprecated, for removal: This API element is subject to removal in a future version.This method was originally specified to destroy an empty thread group. The ability to explicitly destroy a thread group no longer exists. A thread group is eligible to be GC'ed when there are no live threads in the group and it is otherwise unreachable.什么也不做。 -
list
public void list()将有关此线程组的信息打印到标准输出。此方法仅用于调试。 -
uncaughtException
当此线程组中的线程因未捕获的异常而停止,并且线程没有安装特定的Thread.UncaughtExceptionHandler
时,Java虚拟机会调用此线程组的uncaughtException
方法。ThreadGroup
的uncaughtException
方法执行以下操作:- 如果此线程组有父线程组,则使用相同的两个参数调用该父线程组的
uncaughtException
方法。 - 否则,此方法检查是否安装了默认未捕获异常处理程序,如果有,则调用其
uncaughtException
方法,使用相同的两个参数。 - 否则,将包含线程名称(从线程的
getName
方法返回)和堆栈回溯(使用Throwable
的printStackTrace
方法)的消息打印到标准错误流中。
应用程序可以在
ThreadGroup
的子类中覆盖此方法,以提供替代处理未捕获异常的方法。- 指定由:
-
uncaughtException
在接口Thread.UncaughtExceptionHandler
- 参数:
-
t
- 即将退出的线程。 -
e
- 未捕获的异常。
- 如果此线程组有父线程组,则使用相同的两个参数调用该父线程组的
-
toString
返回此线程组的字符串表示形式。
-