public class ThreadGroup extends Object implements Thread.UncaughtExceptionHandler
允许线程访问有关其线程组的信息,但不能访问有关其线程组的父线程组或任何其他线程组的信息。
Constructor and Description |
---|
ThreadGroup(String name)
构造一个新的线程组。
|
ThreadGroup(ThreadGroup parent, String name)
创建一个新的线程组。
|
Modifier and Type | Method and Description |
---|---|
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()
返回此Thread组的字符串表示形式。
|
void |
uncaughtException(Thread t, Throwable e)
当此线程组中的线程因为一个未捕获的异常由Java Virtual Machine调用,而线程不具有特定 Thread.UncaughtExceptionHandler 安装。
|
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
方式调用,以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)
list
- 放置线程列表的数组
SecurityException
- 如果
checkAccess确定当前线程无法访问此线程组
public int enumerate(Thread[] list, boolean recurse)
recurse
为true
,则此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程的引用。
如果数组太短而不能容纳所有线程,则会忽略额外的线程。
应用程序可能会使用activeCount方法来估计数组的大小,但是如果数组太短而不能容纳所有线程,则会忽略额外的线程。 如果获取此线程组中的每个活动线程至关重要,则调用者应验证返回的int值是否严格小于list
的长度。
由于本方法中固有的竞争条件,建议该方法仅用于调试和监控。
list
- 放置线程列表的数组
recurse
- 如果
true
,递归枚举此线程组的所有子组
SecurityException
- 如果
checkAccess确定当前线程无法访问此线程组
public int activeGroupCount()
返回的值只是一个估计,因为线程组的数量可能会在此方法遍历内部数据结构时动态更改。 此方法主要用于调试和监视。
public int enumerate(ThreadGroup[] list)
list
- 放置线程组列表的数组
SecurityException
- 如果
checkAccess确定当前线程不能访问此线程组
public int enumerate(ThreadGroup[] list, boolean recurse)
recurse
是true
,此方法递归枚举此线程组的所有子组,并且还包括对这些子组中每个活动线程组的引用。
应用程序可能会使用activeGroupCount方法来估计数组的大小,但是如果数组太短而不能容纳所有线程组,则会忽略额外的线程组。 如果在此线程组中获取每个活动子组非常重要,则调用者应验证返回的int值是否严格小于list
的长度。
由于本方法中固有的竞争条件,建议该方法仅用于调试和监控。
list
- 将线程组列表放入的数组
recurse
- 如果
true
,递归枚举所有子组
SecurityException
- 如果
checkAccess确定当前线程无法访问此线程组
@Deprecated public final void stop()
首先,这个线程组的checkAccess
方法被调用没有参数; 这可能会导致安全异常。
然后,该方法在该线程组及其所有子组中的所有线程上调用stop
方法。
SecurityException
- 如果当前线程不允许访问此线程组或线程组中的任何线程。
SecurityException
, Thread.stop()
, checkAccess()
public final void interrupt()
首先,这个线程组的checkAccess
方法被调用,没有参数; 这可能会导致安全异常。
然后,该方法在该线程组及其所有子组中的所有线程上调用interrupt
方法。
SecurityException
- 如果当前线程不允许访问此线程组或线程组中的任何线程。
Thread.interrupt()
, SecurityException
, checkAccess()
@Deprecated public final void suspend()
首先,这个线程组的checkAccess
方法被调用,没有参数; 这可能会导致安全异常。
然后,该方法在该线程组及其所有子组中的所有线程上调用suspend
方法。
SecurityException
- 如果当前线程不允许访问此线程组或线程组中的任何线程。
Thread.suspend()
, SecurityException
, checkAccess()
@Deprecated public final void resume()
首先,这个线程组的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
安装。
uncaughtException
方法ThreadGroup
以下操作:
uncaughtException
使用相同的两个参数调用该父进程的uncaughtException
方法。 uncaughtException
方法。 Throwable
参数是的一个实例ThreadDeath
。 如果是这样,没有什么特别之处。 否则,包含该线程的名称的消息,如从线程的返回getName
方法,以及在堆栈中,使用Throwable
的printStackTrace
方法,打印到standard error stream 。 应用程序可以在ThreadGroup的ThreadGroup
类中覆盖此方法,以提供未捕获异常的替代处理。
uncaughtException
在界面
Thread.UncaughtExceptionHandler
t
- 即将退出的线程。
e
- 未捕获的异常。
@Deprecated public boolean allowThreadSuspension(boolean b)
b
- 布尔允许或不允许暂停
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.