public class ThreadGroup
extends Object
implements Thread.UncaughtExceptionHandler
java.lang.Object | |
↳ | java.lang.ThreadGroup |
线程组表示一组线程。 另外,线程组还可以包含其他线程组。 线程组形成一棵树,其中除初始线程组以外的每个线程组都有一个父节点。
允许线程访问有关其自己线程组的信息,但不能访问有关其线程组的父线程组或任何其他线程组的信息。
Public constructors |
|
---|---|
ThreadGroup(String name) 构造一个新的线程组。 |
|
ThreadGroup(ThreadGroup parent, String name) 创建一个新的线程组。 |
Public methods |
|
---|---|
int |
activeCount() 返回此线程组及其子组中活动线程数的估计值。 |
int |
activeGroupCount() 返回此线程组及其子组中活动组数量的估计值。 |
boolean |
allowThreadSuspension(boolean b) 此方法在API级别1中已被弃用。此调用的定义取决于 |
final void |
checkAccess() 确定当前正在运行的线程是否有权修改此线程组。 |
final void |
destroy() 销毁此线程组及其所有子组。 |
int |
enumerate(ThreadGroup[] list) 复制到指定数组引用此线程组及其子组中的每个活动子组。 |
int |
enumerate(ThreadGroup[] list, boolean recurse) 复制到此线程组中每个活动子组的指定数组引用中。 |
int |
enumerate(Thread[] list) 将此线程组及其子组中的每个活动线程复制到指定数组中。 |
int |
enumerate(Thread[] list, boolean recurse) 将此线程组中的每个活动线程复制到指定数组中。 |
final int |
getMaxPriority() 返回此线程组的最大优先级。 |
final String |
getName() 返回此线程组的名称。 |
final ThreadGroup |
getParent() 返回此线程组的父项。 |
final void |
interrupt() 中断此线程组中的所有线程。 |
final boolean |
isDaemon() 测试此线程组是否为守护线程组。 |
boolean |
isDestroyed() 测试该线程组是否已被销毁。 |
void |
list() 将有关该线程组的信息打印到标准输出。 |
final boolean |
parentOf(ThreadGroup g) 测试此线程组是线程组参数还是其祖先线程组之一。 |
final void |
resume() 此方法在API级别1中已弃用。此方法仅与Thread.suspend和ThreadGroup.suspend一起使用,两者都已被弃用,因为它们固有地容易出现死锁。 有关详细信息,请参阅 |
final void |
setDaemon(boolean daemon) 更改此线程组的守护程序状态。 |
final void |
setMaxPriority(int pri) 设置组的最大优先级。 |
final void |
stop() 此方法在API级别1中已弃用。此方法本质上不安全。 有关详细信息,请参阅 |
final void |
suspend() 此方法在API级别1中已弃用。此方法本质上容易出现死锁。 有关详细信息,请参阅 |
String |
toString() 返回此线程组的字符串表示形式。 |
void |
uncaughtException(Thread t, Throwable e) 当线程组中的线程由于未捕获的异常而停止时,由Java虚拟机调用,并且该线程没有安装特定的 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.lang.Thread.UncaughtExceptionHandler
|
ThreadGroup (String name)
构造一个新的线程组。 这个新组的父节点是当前正在运行的线程的线程组。
父线程组的checkAccess
方法不带任何参数调用; 这可能会导致安全异常。
Parameters | |
---|---|
name |
String : the name of the new thread group. |
Throws | |
---|---|
SecurityException |
if the current thread cannot create a thread in the specified thread group. |
也可以看看:
ThreadGroup (ThreadGroup parent, String name)
创建一个新的线程组。 这个新组的父节点是指定的线程组。
父线程组的checkAccess
方法在不带参数的情况下调用; 这可能会导致安全异常。
Parameters | |
---|---|
parent |
ThreadGroup : the parent thread group. |
name |
String : the name of the new thread group. |
Throws | |
---|---|
NullPointerException |
if the thread group argument is null . |
SecurityException |
if the current thread cannot create a thread in the specified thread group. |
也可以看看:
int activeCount ()
返回此线程组及其子组中活动线程数的估计值。 递归迭代此线程组中的所有子组。
返回的值仅为估计值,因为线程数可能会动态变化,而此方法会遍历内部数据结构,并可能受某些系统线程的影响。 此方法主要用于调试和监控目的。
Returns | |
---|---|
int |
an estimate of the number of active threads in this thread group and in any other thread group that has this thread group as an ancestor |
int activeGroupCount ()
返回此线程组及其子组中活动组数量的估计值。 递归迭代此线程组中的所有子组。
返回的值只是一个估计值,因为在此方法遍历内部数据结构时,线程组的数量可能会动态变化。 此方法主要用于调试和监控目的。
Returns | |
---|---|
int |
the number of active thread groups with this thread group as an ancestor |
boolean allowThreadSuspension (boolean b)
此方法在API级别1中已弃用。
此调用的定义取决于suspend()
,已弃用。 此外,此调用的行为从未被指定。
由VM用来控制lowmem隐式暂停。
Parameters | |
---|---|
b |
boolean : boolean to allow or disallow suspension |
Returns | |
---|---|
boolean |
true on success |
void checkAccess ()
确定当前正在运行的线程是否有权修改此线程组。
如果有安全管理器, checkAccess
该线程组为参数调用其checkAccess
方法。 这可能会导致投掷SecurityException
。
Throws | |
---|---|
SecurityException |
if the current thread is not allowed to access this thread group. |
void destroy ()
销毁此线程组及其所有子组。 该线程组必须为空,表示此线程组中已经停止的所有线程。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
Throws | |
---|---|
IllegalThreadStateException |
if the thread group is not empty or if the thread group has already been destroyed. |
SecurityException |
if the current thread cannot modify this thread group. |
也可以看看:
int enumerate (ThreadGroup[] list)
复制到指定数组引用此线程组及其子组中的每个活动子组。
此方法的调用的行为与调用完全相同
enumerate
(list, true)
Parameters | |
---|---|
list |
ThreadGroup : an array into which to put the list of thread groups |
Returns | |
---|---|
int |
the number of thread groups put into the array |
Throws | |
---|---|
SecurityException |
if checkAccess determines that the current thread cannot access this thread group |
int enumerate (ThreadGroup[] list, boolean recurse)
复制到此线程组中每个活动子组的指定数组引用中。 如果recurse
是true
,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程组的引用。
应用程序可能会使用activeGroupCount方法来估计数组的大小,但如果数组太短而无法容纳所有线程组,则会以无提示方式忽略额外的线程组。 如果获取此线程组中的每个活动子组都非常重要,则调用者应验证返回的int值严格小于list
的长度。
由于这种方法固有的竞争条件,建议该方法仅用于调试和监控目的。
Parameters | |
---|---|
list |
ThreadGroup : an array into which to put the list of thread groups |
recurse |
boolean : if true , recursively enumerate all subgroups |
Returns | |
---|---|
int |
the number of thread groups put into the array |
Throws | |
---|---|
SecurityException |
if checkAccess determines that the current thread cannot access this thread group |
int enumerate (Thread[] list)
将此线程组及其子组中的每个活动线程复制到指定数组中。
此方法的调用的行为与调用完全相同
enumerate
(list, true)
Parameters | |
---|---|
list |
Thread : an array into which to put the list of threads |
Returns | |
---|---|
int |
the number of threads put into the array |
Throws | |
---|---|
SecurityException |
if checkAccess determines that the current thread cannot access this thread group |
int enumerate (Thread[] list, boolean recurse)
将此线程组中的每个活动线程复制到指定数组中。 如果recurse
为true
,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。 如果数组太短而不能容纳所有的线程,则额外的线程将被静默地忽略。
应用程序可能会使用activeCount方法来估计数组应该有多大,但是如果数组太短而无法保存所有线程,则额外的线程将被忽略。 如果获得此线程组中的每个活动线程都非常重要,则调用方应验证返回的int值是否严格小于list
的长度。
由于这种方法固有的竞争条件,建议该方法仅用于调试和监控目的。
Parameters | |
---|---|
list |
Thread : an array into which to put the list of threads |
recurse |
boolean : if true , recursively enumerate all subgroups of this thread group |
Returns | |
---|---|
int |
the number of threads put into the array |
Throws | |
---|---|
SecurityException |
if checkAccess determines that the current thread cannot access this thread group |
int getMaxPriority ()
返回此线程组的最大优先级。 作为该组的一部分的线程不能具有比最大优先级更高的优先级。
Returns | |
---|---|
int |
the maximum priority that a thread in this thread group can have. |
也可以看看:
String getName ()
返回此线程组的名称。
Returns | |
---|---|
String |
the name of this thread group. |
ThreadGroup getParent ()
返回此线程组的父项。
首先,如果父项不是null
,则父线程组的checkAccess
方法将不带参数调用; 这可能会导致安全异常。
Returns | |
---|---|
ThreadGroup |
the parent of this thread group. The top-level thread group is the only thread group whose parent is null . |
Throws | |
---|---|
SecurityException |
if the current thread cannot modify this thread group. |
void interrupt ()
中断此线程组中的所有线程。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
然后,此方法在此线程组中的所有线程及其所有子组中调用 interrupt
方法。
Throws | |
---|---|
SecurityException |
if the current thread is not allowed to access this thread group or any of the threads in the thread group. |
boolean isDaemon ()
测试此线程组是否为守护线程组。 守护进程线程组在最后一个线程停止或其最后一个线程组被销毁时自动销毁。
Returns | |
---|---|
boolean |
true if this thread group is a daemon thread group; false otherwise. |
boolean isDestroyed ()
测试该线程组是否已被销毁。
Returns | |
---|---|
boolean |
true if this object is destroyed |
boolean parentOf (ThreadGroup g)
测试此线程组是线程组参数还是其祖先线程组之一。
Parameters | |
---|---|
g |
ThreadGroup : a thread group. |
Returns | |
---|---|
boolean |
true if this thread group is the thread group argument or one of its ancestor thread groups; false otherwise. |
void resume ()
此方法在API级别1中已弃用。
此方法仅与Thread.suspend和ThreadGroup.suspend一起使用,两者都已被弃用,因为它们固有地容易出现死锁。 详情请参阅suspend()
。
恢复此线程组中的所有线程。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
然后该方法在该线程组中的所有线程及其所有子组中调用 resume
方法。
Throws | |
---|---|
SecurityException |
if the current thread is not allowed to access this thread group or any of the threads in the thread group. |
void setDaemon (boolean daemon)
更改此线程组的守护程序状态。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
守护进程线程组在最后一个线程停止或其最后一个线程组被销毁时自动销毁。
Parameters | |
---|---|
daemon |
boolean : if true , marks this thread group as a daemon thread group; otherwise, marks this thread group as normal. |
Throws | |
---|---|
SecurityException |
if the current thread cannot modify this thread group. |
也可以看看:
void setMaxPriority (int pri)
设置组的最大优先级。 已经具有较高优先级的线程组中的线程不受影响。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
如果参数 pri
小于 MIN_PRIORITY
或大于 MAX_PRIORITY
,则它被限制为这些值。
否则,此ThreadGroup对象的优先级设置为指定的pri
和此线程组的父级的最大允许优先级中的较小者。 (如果此线程组是系统线程组,但没有父系,则其最大优先级设置为pri
)然后,对于属于此线程组的每个线程组,以pri
作为其参数递归地调用此方法。
Parameters | |
---|---|
pri |
int : the new priority of the thread group. |
Throws | |
---|---|
SecurityException |
if the current thread cannot modify this thread group. |
void stop ()
此方法在API级别1中已弃用。
这种方法本质上是不安全的。 详情请参阅stop()
。
停止此线程组中的所有线程。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
然后,此方法在该线程组中的所有线程及其所有子组中调用 stop
方法。
Throws | |
---|---|
SecurityException |
if the current thread is not allowed to access this thread group or any of the threads in the thread group. |
也可以看看:
void suspend ()
此方法在API级别1中已弃用。
这种方法本质上容易出现死锁。 有关详细信息,请参阅suspend()
。
暂停此线程组中的所有线程。
首先,这个线程组的checkAccess
方法被调用时没有参数; 这可能会导致安全异常。
然后,此方法将在此线程组中的所有线程及其所有子组中调用 suspend
方法。
Throws | |
---|---|
SecurityException |
if the current thread is not allowed to access this thread group or any of the threads in the thread group. |
String toString ()
返回此线程组的字符串表示形式。
Returns | |
---|---|
String |
a string representation of this thread group. |
void uncaughtException (Thread t, Throwable e)
当此线程组中的线程由于未捕获的异常而停止且该线程没有安装特定的 Thread.UncaughtExceptionHandler
时,由Java虚拟机调用。
该 uncaughtException
的方法 ThreadGroup
执行以下操作:
uncaughtException
method of that parent is called with the same two arguments. uncaughtException
method is called with the same two arguments. Throwable
argument is an instance of ThreadDeath
. If so, nothing special is done. Otherwise, a message containing the thread's name, as returned from the thread's getName
method, and a stack backtrace, using the Throwable
's printStackTrace
method, is printed to the standard error stream. 应用程序可以在 ThreadGroup
子类中重写此方法,以提供对未捕获异常的替代处理。
Parameters | |
---|---|
t |
Thread : the thread that is about to exit. |
e |
Throwable : the uncaught exception. |