java.lang.Object java.lang.ThreadGroup
public class ThreadGroup
线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。
允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。
构造方法摘要 | |
---|---|
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 时,因为它们所固有的容易导致死锁的特性,所以两者都已废弃。有关详细信息,请参阅 Thread.suspend() 。 |
void |
setDaemon(boolean daemon) 更改此线程组的后台程序状态。 |
void |
setMaxPriority(int pri) 设置线程组的最高优先级。 |
void |
stop() 已过时。 此方法具有固有的不安全性。有关详细信息,请参阅 Thread.stop() 。 |
void |
suspend() 已过时。 此方法容易导致死锁。有关详细信息,请参阅 Thread.suspend() 。 |
String |
toString() 返回此线程组的字符串表示形式。 |
void |
uncaughtException(Thread t, Throwable e) 当此线程组中的线程因为一个未捕获的异常而停止,并且线程没有安装特定 Thread.UncaughtExceptionHandler 时,由 Java Virtual Machine 调用此方法。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
public ThreadGroup(String name)
不使用任何参数调用父线程组的 checkAccess
方法;这可能导致一个安全性异常。
name
- 新线程组的名称。
SecurityException
- 如果当前线程不能在指定的线程组中创建线程。
checkAccess()
public ThreadGroup(ThreadGroup parent, String name)
不使用任何参数调用父线程组的 checkAccess
方法;这可能导致一个安全性异常。
parent
- 父线程组。
name
- 新线程组的名称。
NullPointerException
- 如果线程组参数为
null
。
SecurityException
- 如果当前线程不能在指定的线程组中创建线程。
SecurityException
,
checkAccess()
方法详细信息 |
---|
public final String getName()
public final ThreadGroup getParent()
首先,如果父线程组不为 null
,则不使用任何参数直接调用父线程组的 checkAccess
方法;这可能导致一个安全性异常。
null
的线程组。
SecurityException
- 如果当前线程无法修改此线程组。
checkAccess()
,
SecurityException
,
RuntimePermission
public final int getMaxPriority()
setMaxPriority(int)
public final boolean isDaemon()
true
;否则返回
false
。
public boolean isDestroyed()
public final void setDaemon(boolean daemon)
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
在停止后台程序线程组的最后一个线程或销毁其最后一个线程组时,自动销毁此后台程序线程组。
daemon
- 如果为
true
,则表示此线程组是一个后台程序线程组;否则,表示此线程组是一个普通线程组。
SecurityException
- 如果当前线程无法修改此线程组。
SecurityException
,
checkAccess()
public final void setMaxPriority(int pri)
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
如果 pri
参数小于 Thread.MIN_PRIORITY
或大于 Thread.MAX_PRIORITY
,则线程组的最高优先级保持不变。
否则,此 ThreadGroup 对象的优先级被设置为比指定的 pri
参数更小,所允许的最高优先级是此线程组的父线程组的优先级。(如果此线程组是系统线程组,没有父线程组,那么只需将最高优先级设置为 pri
即可。)然后使用 pri
作为此方法的参数,以递归的方式对属于此线程组的每个线程组调用此方法。
pri
- 线程组的新优先级。
SecurityException
- 如果当前线程无法修改此线程组。
getMaxPriority()
,
SecurityException
,
checkAccess()
public final boolean parentOf(ThreadGroup g)
g
- 一个线程组。
true
;否则返回
false
。
public final void checkAccess()
如果有安全管理器,则用此线程组作为其参数调用 checkAccess
方法。结果可能是抛出一个 SecurityException
。
SecurityException
- 如果不允许当前线程访问此线程组。
SecurityManager.checkAccess(java.lang.ThreadGroup)
public int activeCount()
由于结果所固有的不精确特性,建议只将此方法用于信息目的。
public int enumerate(Thread[] list)
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
应用程序可以使用 activeCount
方法获取数组大小的估计数,但是,如果数组太小而无法保持所有线程,则忽略额外的线程。如果获得此线程组及其子组中的所有活动线程非常重要,则调用方应该验证返回的 int 值是否严格小于 list 的长度。
由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。
list
- 放置线程列表的数组。
SecurityException
- 如果不允许当前线程枚举此线程组。
activeCount()
,
checkAccess()
public int enumerate(Thread[] list, boolean recurse)
recurse
标志为
true
,则还包括对此线程的子组中的所有活动线程的引用。如果数组太小而无法保持所有线程,则忽略额外的线程。
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
应用程序可以使用 activeCount
获取数组大小的估计数,但是,如果数组太小而无法保持所有线程,则忽略额外的线程。如果获得此线程组中的所有活动线程非常重要,则调用方应该验证返回的整数值是否确实小于 list 的长度。
由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。
list
- 放置线程列表的数组。
recurse
- 一个标记,指示是否还包括作为此线程组的子组的线程组中的线程。
SecurityException
- 如果不允许当前线程枚举此线程组。
activeCount()
,
checkAccess()
public int activeGroupCount()
由于结果所固有的不精确特性,建议只将此方法用于信息目的。
public int enumerate(ThreadGroup[] list)
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
应用程序可以使用 activeGroupCount
获取数组大小的估计数,但是,如果数组太小而无法保持所有线程组,则忽略额外的线程组。如果获得此线程组中的所有活动子组非常重要,则调用方应该验证返回的整数值是否确实小于 list 的长度。
由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。
list
- 放置线程组列表的数组。
SecurityException
- 如果不允许当前线程枚举此线程组。
activeGroupCount()
,
checkAccess()
public int enumerate(ThreadGroup[] list, boolean recurse)
recurse
标志为
true
,则还包括对子组的所有活动子组的引用,等等。
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
应用程序可以使用 activeGroupCount
获取数组大小的估计数,但是,如果数组太小而无法保持所有线程组,则忽略额外的线程组。如果获得此线程组中的所有活动子组非常重要,则调用方应该验证返回的整数值是否确实小于 list 的长度。
由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。
list
- 放置线程列表的数组。
recurse
- 一个标记,指示是否以递归的方式枚举所有已包含的线程组。
SecurityException
- 如果不允许当前线程枚举此线程组。
activeGroupCount()
,
checkAccess()
@Deprecated public final void stop()
Thread.stop()
。
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
然后,此方法将对此线程组及其所有子组中的所有线程调用 stop
方法。
SecurityException
- 如果不允许当前线程访问此线程组或线程组中的任何线程。
SecurityException
,
Thread.stop()
,
checkAccess()
public final void interrupt()
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
然后,此方法将对此线程组及其所有子组中的所有线程调用 interrupt
方法。
SecurityException
- 如果不允许当前线程访问此线程组或线程组中的任何线程。
Thread.interrupt()
,
SecurityException
,
checkAccess()
@Deprecated public final void suspend()
Thread.suspend()
。
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
然后,此方法将对该线程组及其所有子组中的所有线程调用 suspend
方法。
SecurityException
- 如果不允许当前线程访问此线程组或线程组中的任何线程。
Thread.suspend()
,
SecurityException
,
checkAccess()
@Deprecated public final void resume()
Thread.suspend()
。
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
然后,此方法将对该线程组及其所有子组中的所有线程调用 resume
方法。
SecurityException
- 如果不允许当前线程访问此线程组或线程组中的任何线程。
SecurityException
,
Thread.resume()
,
checkAccess()
public final void destroy()
首先,不使用任何参数调用此线程组的 checkAccess
方法;这可能导致一个安全性异常。
IllegalThreadStateException
- 如果线程组不为空,或者线程组已经被销毁。
SecurityException
- 如果当前线程不能修改此线程组。
checkAccess()
public void list()
public void uncaughtException(Thread t, Throwable e)
Thread.UncaughtExceptionHandler
时,由 Java Virtual Machine 调用此方法。
ThreadGroup
的 uncaughtException
方法执行以下操作:
uncaughtException
方法时带有两个相同的参数。 uncaughtException
方法时带有两个相同的参数。 Throwable
参数是否为一个 ThreadDeath
实例。如果是,则不会做任何特殊的操作。否则,在从线程的 getName
方法返回时,会使用 Throwable
的 printStackTrace
方法,将包含线程名称的消息和堆栈跟踪信息输出到标准错误流。 应用程序可以重写 ThreadGroup
的子类中的方法,以提供处理未捕获异常的替代办法。
Thread.UncaughtExceptionHandler
中的
uncaughtException
t
- 即将退出的线程。
e
- 未捕获的异常。
@Deprecated public boolean allowThreadSuspension(boolean b)
suspend()
,它被废弃了。更进一步地说,此调用的行为从不被指定。
b
- 允许或不允许挂起时的布尔值
public String toString()