java.lang.Object
|---java.lang.ThreadGroup
public class ThreadGroup
extends Object
implements Thread.UncaughtExceptionHandler
一个线程组代表一组线程。 此外,一个线程组还可以包括其他线程组。 线程组形成一棵树,其中除了初始线程组之外的每个线程组都有一个父级。
允许线程访问有关其自己的线程组的信息,但不能访问有关其线程组的父线程组或任何其他线程组的信息。
构造函数 | 描述 |
---|---|
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() | 返回此线程组的字符串表示形式。 |
void | uncaughtException(Thread t, Throwable e) | 当此线程组中的线程由于未捕获的异常而停止并且该线程没有安装特定的 Thread.UncaughtExceptionHandler 时,由 Java 虚拟机调用。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
public ThreadGroup(String name)
构造一个新的线程组。 这个新组的父组是当前运行线程的线程组。
调用父线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
参数:
参数名称 | 参数描述 |
---|---|
name | 新线程组的名称。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果当前线程无法在指定线程组中创建线程。 |
public ThreadGroup(ThreadGroup parent, String name)
创建一个新的线程组。 这个新组的父级是指定的线程组。
调用父线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
参数:
参数名称 | 参数描述 |
---|---|
parent | 父线程组。 |
name | 新线程组的名称。 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果线程组参数为空。 |
SecurityException | 如果当前线程无法在指定线程组中创建线程。 |
public final String getName()
返回此线程组的名称。
返回:
此线程组的名称。
public final ThreadGroup getParent()
返回此线程组的父级。
首先,如果parent不为null,则调用父线程组的checkAccess方法,不带参数; 这可能会导致安全异常。
返回:
此线程组的父级。 顶级线程组是唯一其父级为空的线程组。
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果当前线程不能修改这个线程组。 |
public final int getMaxPriority()
返回此线程组的最大优先级。 属于该组的线程的优先级不能高于最大优先级。
返回:
此线程组中的线程可以拥有的最大优先级。
public final boolean isDaemon()
测试此线程组是否为守护线程组。 守护线程组在其最后一个线程停止或其最后一个线程组被销毁时自动销毁。
返回:
如果此线程组是守护线程组,则为 true; 否则为假。
public boolean isDestroyed()
测试此线程组是否已被销毁。
返回:
如果此对象被销毁,则为 true
public final void setDaemon(boolean daemon)
更改此线程组的守护程序状态。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
守护线程组在其最后一个线程停止或其最后一个线程组被销毁时自动销毁。
参数:
参数名称 | 参数描述 |
---|---|
daemon | 如果为true,则将此线程组标记为守护线程组; 否则,将此线程组标记为正常。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果当前线程不能修改这个线程组。 |
public final void setMaxPriority(int pri)
设置组的最大优先级。 线程组中已经具有较高优先级的线程不受影响。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
如果 pri 参数小于 Thread#MIN_PRIORITY 或大于 Thread#MAX_PRIORITY,则组的最大优先级保持不变。
否则,此 ThreadGroup 对象的优先级设置为指定的 pri 和此线程组的父级允许的最大优先级中的较小者。 (如果这个线程组是系统线程组,它没有父线程,那么它的最大优先级简单地设置为 pri。)然后这个方法被递归调用,以 pri 作为它的参数,对于属于这个线程组的每个线程组 .
参数:
参数名称 | 参数描述 |
---|---|
pri | 线程组的新优先级。 |
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果当前线程不能修改这个线程组。 |
public final boolean parentOf(ThreadGroup g)
测试此线程组是线程组参数还是它的祖先线程组之一。
参数:
参数名称 | 参数描述 |
---|---|
g | 一个线程组。 |
返回:
如果此线程组是线程组参数或其祖先线程组之一,则为 true; 否则为假。
public final void checkAccess()
确定当前运行的线程是否有权修改此线程组。
如果有一个安全管理器,它的 checkAccess 方法会以这个线程组作为它的参数被调用。 这可能会导致抛出 SecurityException。
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果当前线程不允许访问这个线程组。 |
public int activeCount()
返回此线程组及其子组中活动线程数的估计值。 递归迭代此线程组中的所有子组。
返回的值只是一个估计值,因为在此方法遍历内部数据结构时线程数可能会动态变化,并且可能会受到某些系统线程的存在的影响。 此方法主要用于调试和监视目的。
返回:
此线程组和以该线程组为祖先的任何其他线程组中的活动线程数的估计
public int enumerate(Thread[] list)
将此线程组及其子组中的每个活动线程复制到指定的数组中。
此方法的调用与调用的行为方式完全相同
enumerate(list, true)
参数:
参数名称 | 参数描述 |
---|---|
list | 将线程列表放入其中的数组 |
返回:
放入数组的线程数
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | if checkAccess判断当前线程不能访问这个线程组 |
public int enumerate(Thread[] list, boolean recurse)
将此线程组中的每个活动线程复制到指定的数组中。 如果 recurse 为真,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。 如果数组太短而无法容纳所有线程,则会默默忽略多余的线程。
应用程序可能会使用 activeCount 方法来估计数组应该有多大,但是如果数组太短而无法容纳所有线程,那么额外的线程将被忽略。 如果获取此线程组中的每个活动线程至关重要,则调用者应验证返回的 int 值是否严格小于列表的长度。
由于此方法中固有的竞争条件,建议仅将该方法用于调试和监视目的。
参数:
参数名称 | 参数描述 |
---|---|
list | 将线程列表放入其中的数组 |
recurse | 如果为true,递归枚举该线程组的所有子组 |
返回:
放入数组的线程数
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | if checkAccess判断当前线程不能访问这个线程组 |
public int activeGroupCount()
返回此线程组及其子组中活动组数的估计值。 递归迭代此线程组中的所有子组。
返回的值只是一个估计值,因为在此方法遍历内部数据结构时线程组的数量可能会动态变化。 此方法主要用于调试和监视目的。
返回:
以此线程组为祖先的活动线程组的数量
public int enumerate(ThreadGroup[] list)
将对该线程组及其子组中每个活动子组的引用复制到指定的数组中。
此方法的调用与调用的行为方式完全相同
enumerate(list, true)
参数:
参数名称 | 参数描述 |
---|---|
list | 将线程组列表放入其中的数组 |
返回:
放入数组的线程组数
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | if checkAccess判断当前线程不能访问这个线程组 |
public int enumerate(ThreadGroup[] list, boolean recurse)
将对该线程组中每个活动子组的引用复制到指定的数组中。 如果 recurse 为真,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程组的引用。
应用程序可能会使用 activeGroupCount 方法来估计数组应该有多大,但是如果数组太短而无法容纳所有线程组,那么额外的线程组将被忽略。 如果获取此线程组中的每个活动子组至关重要,则调用者应验证返回的 int 值是否严格小于列表的长度。
由于此方法中固有的竞争条件,建议仅将该方法用于调试和监视目的。
参数:
参数名称 | 参数描述 |
---|---|
list | 将线程组列表放入其中的数组 |
recurse | 如果为true,递归枚举所有子组 |
返回:
放入数组的线程组数
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | if checkAccess判断当前线程不能访问这个线程组 |
@Deprecated public final void stop()
已弃用。 这种方法本质上是不安全的。
停止此线程组中的所有线程。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
然后,此方法在此线程组及其所有子组中的所有线程上调用 stop 方法。
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果不允许当前线程访问该线程组或线程组中的任何线程。 |
public final void interrupt()
中断此线程组中的所有线程。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
然后,此方法在此线程组及其所有子组中的所有线程上调用中断方法。
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果不允许当前线程访问该线程组或线程组中的任何线程。 |
@Deprecated public final void suspend()
已弃用。 这种方法本质上容易死锁。
挂起该线程组中的所有线程。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
然后,此方法在此线程组及其所有子组中的所有线程上调用挂起方法。
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果不允许当前线程访问该线程组或线程组中的任何线程。 |
@Deprecated public final void resume()
已弃用。 此方法仅与 Thread.suspend 和 ThreadGroup.suspend 一起使用,这两种方法都已被弃用,因为它们本身就容易死锁。
恢复此线程组中的所有线程。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
然后,此方法在此线程组及其所有子组中的所有线程上调用 resume 方法。
Throws:
Throw名称 | Throw描述 |
---|---|
SecurityException | 如果不允许当前线程访问该线程组或线程组中的任何线程。 |
public final void destroy()
销毁此线程组及其所有子组。 此线程组必须为空,表示该线程组中的所有线程都已停止。
首先,调用该线程组的 checkAccess 方法,不带参数; 这可能会导致安全异常。
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalThreadStateException | 如果线程组不为空或线程组已被销毁。 |
SecurityException | 如果当前线程不能修改这个线程组。 |
public void list()
将有关此线程组的信息打印到标准输出。 此方法仅对调试有用。
public void uncaughtException(Thread t, Throwable e)
当此线程组中的线程由于未捕获的异常而停止并且该线程没有安装特定的 Thread.UncaughtExceptionHandler 时,由 Java 虚拟机调用。
ThreadGroup 的 uncaughtException 方法执行以下操作:
应用程序可以在 ThreadGroup 的子类中覆盖此方法,以提供对未捕获异常的替代处理。
指定者:
接口 Thread.UncaughtExceptionHandler 中的 uncaughtException
参数:
参数名称 | 参数描述 |
---|---|
t | 即将退出的线程。 |
e | 未捕获的异常。 |
@Deprecated public boolean allowThreadSuspension(boolean b)
已弃用。 此调用的定义取决于已弃用的suspend()。 此外,从未指定此调用的行为。
VM 使用它来控制 lowmem 隐式挂起。
参数:
参数名称 | 参数描述 |
---|---|
b | 允许或禁止暂停的布尔值 |
返回:
true on success
public String toString()
返回此线程组的字符串表示形式。
覆盖:
类 Object 中的 toString
返回:
此线程组的字符串表示形式。
备案信息: 粤ICP备15087711号-2
Copyright © 2008-2024 啊嘎哇在线工具箱 All Rights.
本站所有资料来源于网络,版权归原作者所有,仅作学习交流使用,如不慎侵犯了您的权利,请联系我们。