- 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)
创建一个新的线程组。
-
方法摘要
所有方法 实例方法 具体的方法 弃用的方法 变量和类型 方法 描述 int
activeCount()
返回此线程组及其子组中活动线程数的估计值。int
activeGroupCount()
返回此线程组及其子组中活动组数的估计值。boolean
allowThreadSuspension(boolean b)
已过时。此调用的定义取决于suspend()
,已弃用。void
checkAccess()
确定当前运行的线程是否具有修改此线程组的权限。void
destroy()
销毁此线程组及其所有子组。int
enumerate(Thread[] list)
将此线程组及其子组中的每个活动线程复制到指定的数组中。int
enumerate(Thread[] list, boolean recurse)
将此线程组中的每个活动线程复制到指定的数组中。int
enumerate(ThreadGroup[] list)
复制到此线程组及其子组中每个活动子组的指定数组引用。int
enumerate(ThreadGroup[] list, boolean recurse)
复制到此线程组中每个活动子组的指定数组引用。int
getMaxPriority()
返回此线程组的最大优先级。String
getName()
返回此线程组的名称。ThreadGroup
getParent()
返回此线程组的父级。void
interrupt()
中断此线程组中的所有线程。boolean
isDaemon()
测试此线程组是否为守护程序线程组。boolean
isDestroyed()
测试此线程组是否已被销毁。void
list()
将有关此线程组的信息打印到标准输出。boolean
parentOf(ThreadGroup g)
测试此线程组是线程组参数还是其祖先线程组之一。void
resume()
已过时。此方法仅与Thread.suspend
和ThreadGroup.suspend
一起使用,这两种方法都已弃用,因为它们本身就容易出现死锁。void
setDaemon(boolean daemon)
更改此线程组的守护程序状态。void
setMaxPriority(int pri)
设置组的最大优先级。void
stop()
已过时。这种方法本质上是不安全的。void
suspend()
已过时。此方法本身就容易出现死锁。String
toString()
返回此Thread组的字符串表示形式。void
uncaughtException(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.suspend
andThreadGroup.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
-
-