java.lang

接口
异常
错误
注释
java.lang.Object
  继承者 java.lang.ThreadGroup
所有已实现的接口:
Thread.UncaughtExceptionHandler

public class ThreadGroup
     
extends Object
implements Thread.UncaughtExceptionHandler

线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。

允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。

从以下版本开始:
JDK1.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.suspendThreadGroup.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
 

构造方法详细信息

ThreadGroup

public ThreadGroup(String name)
构造一个新线程组。新线程组的父线程组是目前正在运行线程的线程组。

不使用任何参数调用父线程组的 checkAccess 方法;这可能导致一个安全性异常。

参数:
name - 新线程组的名称。
抛出:
SecurityException - 如果当前线程不能在指定的线程组中创建线程。
从以下版本开始:
JDK1.0
另请参见:
checkAccess()

ThreadGroup

public ThreadGroup(ThreadGroup parent,
                   String name)
创建一个新线程组。新线程组的父线程组是指定的线程组。

不使用任何参数调用父线程组的 checkAccess 方法;这可能导致一个安全性异常。

参数:
parent - 父线程组。
name - 新线程组的名称。
抛出:
NullPointerException - 如果线程组参数为 null
SecurityException - 如果当前线程不能在指定的线程组中创建线程。
从以下版本开始:
JDK1.0
另请参见:
SecurityException, checkAccess()
方法详细信息

getName

public final String getName()
返回此线程组的名称。

返回:
此线程组的名称。
从以下版本开始:
JDK1.0

getParent

public final ThreadGroup getParent()
返回此线程组的父线程组。

首先,如果父线程组不为 null,则不使用任何参数直接调用父线程组的 checkAccess 方法;这可能导致一个安全性异常。

返回:
线程组的父线程组。顶级线程组仅为那些父线程组为 null 的线程组。
抛出:
SecurityException - 如果当前线程无法修改此线程组。
从以下版本开始:
JDK1.0
另请参见:
checkAccess(), SecurityException, RuntimePermission

getMaxPriority

public final int getMaxPriority()
返回此线程组的最高优先级。作为此线程组一部分的线程不能拥有比最高优先级更高的优先级。

返回:
此线程组中的线程可拥有的最高优先级。
从以下版本开始:
JDK1.0
另请参见:
setMaxPriority(int)

isDaemon

public final boolean isDaemon()
测试此线程组是否为一个后台程序线程组。在停止后台程序线程组的最后一个线程或销毁其最后一个线程组时,自动销毁这个后台程序线程组。

返回:
如果此线程组是一个后台程序线程组,则返回 true;否则返回 false
从以下版本开始:
JDK1.0

isDestroyed

public boolean isDestroyed()
测试此线程组是否已经被销毁。

返回:
如果此对象被销毁,则返回 true
从以下版本开始:
JDK1.1

setDaemon

public final void setDaemon(boolean daemon)
更改此线程组的后台程序状态。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

在停止后台程序线程组的最后一个线程或销毁其最后一个线程组时,自动销毁此后台程序线程组。

参数:
daemon - 如果为 true,则表示此线程组是一个后台程序线程组;否则,表示此线程组是一个普通线程组。
抛出:
SecurityException - 如果当前线程无法修改此线程组。
从以下版本开始:
JDK1.0
另请参见:
SecurityException, checkAccess()

setMaxPriority

public final void setMaxPriority(int pri)
设置线程组的最高优先级。线程组中已有较高优先级的线程不受影响。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

如果 pri 参数小于 Thread.MIN_PRIORITY 或大于 Thread.MAX_PRIORITY,则线程组的最高优先级保持不变。

否则,此 ThreadGroup 对象的优先级被设置为比指定的 pri 参数更小,所允许的最高优先级是此线程组的父线程组的优先级。(如果此线程组是系统线程组,没有父线程组,那么只需将最高优先级设置为 pri 即可。)然后使用 pri 作为此方法的参数,以递归的方式对属于此线程组的每个线程组调用此方法。

参数:
pri - 线程组的新优先级。
抛出:
SecurityException - 如果当前线程无法修改此线程组。
从以下版本开始:
JDK1.0
另请参见:
getMaxPriority(), SecurityException, checkAccess()

parentOf

public final boolean parentOf(ThreadGroup g)
测试此线程组是否为线程组参数或其祖先线程组之一。

参数:
g - 一个线程组。
返回:
如果此线程组是线程组参数或其祖先线程组之一,则返回 true;否则返回 false
从以下版本开始:
JDK1.0

checkAccess

public final void checkAccess()
确定当前运行的线程是否有权修改此线程组。

如果有安全管理器,则用此线程组作为其参数调用 checkAccess 方法。结果可能是抛出一个 SecurityException

抛出:
SecurityException - 如果不允许当前线程访问此线程组。
从以下版本开始:
JDK1.0
另请参见:
SecurityManager.checkAccess(java.lang.ThreadGroup)

activeCount

public int activeCount()
返回此线程组中活动线程的估计数。结果并不能反映并发活动,并且可能受某些系统线程的存在状态的影响。

由于结果所固有的不精确特性,建议只将此方法用于信息目的。

返回:
此线程组和将此线程组作为其祖先的其他线程组中活动线程的估计数。
从以下版本开始:
JDK1.0

enumerate

public int enumerate(Thread[] list)
把此线程组及其子组中的所有活动线程复制到指定数组中。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

应用程序可以使用 activeCount 方法获取数组大小的估计数,但是,如果数组太小而无法保持所有线程,则忽略额外的线程。如果获得此线程组及其子组中的所有活动线程非常重要,则调用方应该验证返回的 int 值是否严格小于 list 的长度。

由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。

参数:
list - 放置线程列表的数组。
返回:
放入数组中的线程数。
抛出:
SecurityException - 如果不允许当前线程枚举此线程组。
从以下版本开始:
JDK1.0
另请参见:
activeCount(), checkAccess()

enumerate

public int enumerate(Thread[] list,
                     boolean recurse)
把此线程组中的所有活动线程复制到指定数组中。如果 recurse 标志为 true,则还包括对此线程的子组中的所有活动线程的引用。如果数组太小而无法保持所有线程,则忽略额外的线程。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

应用程序可以使用 activeCount 获取数组大小的估计数,但是,如果数组太小而无法保持所有线程,则忽略额外的线程。如果获得此线程组中的所有活动线程非常重要,则调用方应该验证返回的整数值是否确实小于 list 的长度。

由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。

参数:
list - 放置线程列表的数组。
recurse - 一个标记,指示是否还包括作为此线程组的子组的线程组中的线程。
返回:
放入数组中的线程数。
抛出:
SecurityException - 如果不允许当前线程枚举此线程组。
从以下版本开始:
JDK1.0
另请参见:
activeCount(), checkAccess()

activeGroupCount

public int activeGroupCount()
返回此线程组中活动线程组的估计数。结果并不能反映并发活动。

由于结果所固有的不精确特性,建议只将此方法用于信息目的。

返回:
将此线程组作为祖先线程组的活动线程组的数量。
从以下版本开始:
JDK1.0

enumerate

public int enumerate(ThreadGroup[] list)
把对此线程组中的所有活动子组的引用复制到指定数组中。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

应用程序可以使用 activeGroupCount 获取数组大小的估计数,但是,如果数组太小而无法保持所有线程组,则忽略额外的线程组。如果获得此线程组中的所有活动子组非常重要,则调用方应该验证返回的整数值是否确实小于 list 的长度。

由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。

参数:
list - 放置线程组列表的数组。
返回:
放入数组中的线程组的数量。
抛出:
SecurityException - 如果不允许当前线程枚举此线程组。
从以下版本开始:
JDK1.0
另请参见:
activeGroupCount(), checkAccess()

enumerate

public int enumerate(ThreadGroup[] list,
                     boolean recurse)
把对此线程组中的所有活动子组的引用复制到指定数组中。如果 recurse 标志为 true,则还包括对子组的所有活动子组的引用,等等。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

应用程序可以使用 activeGroupCount 获取数组大小的估计数,但是,如果数组太小而无法保持所有线程组,则忽略额外的线程组。如果获得此线程组中的所有活动子组非常重要,则调用方应该验证返回的整数值是否确实小于 list 的长度。

由于使用此方法所固有的竞争条件,建议只将此方法用于信息目的。

参数:
list - 放置线程列表的数组。
recurse - 一个标记,指示是否以递归的方式枚举所有已包含的线程组。
返回:
放入数组中的线程组的数量。
抛出:
SecurityException - 如果不允许当前线程枚举此线程组。
从以下版本开始:
JDK1.0
另请参见:
activeGroupCount(), checkAccess()

stop

@Deprecated
public final void stop()
已过时。  此方法具有固有的不安全性。有关详细信息,请参阅 Thread.stop()

停止此线程组中的所有线程。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

然后,此方法将对此线程组及其所有子组中的所有线程调用 stop 方法。

抛出:
SecurityException - 如果不允许当前线程访问此线程组或线程组中的任何线程。
从以下版本开始:
JDK1.0
另请参见:
SecurityException, Thread.stop(), checkAccess()

interrupt

public final void interrupt()
中断此线程组中的所有线程。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

然后,此方法将对此线程组及其所有子组中的所有线程调用 interrupt 方法。

抛出:
SecurityException - 如果不允许当前线程访问此线程组或线程组中的任何线程。
从以下版本开始:
1.2
另请参见:
Thread.interrupt(), SecurityException, checkAccess()

suspend

@Deprecated
public final void suspend()
已过时。  此方法容易导致死锁。有关详细信息,请参阅 Thread.suspend()

挂起此线程组中的所有线程。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

然后,此方法将对该线程组及其所有子组中的所有线程调用 suspend 方法。

抛出:
SecurityException - 如果不允许当前线程访问此线程组或线程组中的任何线程。
从以下版本开始:
JDK1.0
另请参见:
Thread.suspend(), SecurityException, checkAccess()

resume

@Deprecated
public final void resume()
已过时。  此方法只用于联合 Thread.suspendThreadGroup.suspend 时,因为它们所固有的容易导致死锁的特性,所以两者都已废弃。有关详细信息,请参阅 Thread.suspend()

继续此线程组中的所有线程。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

然后,此方法将对该线程组及其所有子组中的所有线程调用 resume 方法。

抛出:
SecurityException - 如果不允许当前线程访问此线程组或线程组中的任何线程。
从以下版本开始:
JDK1.0
另请参见:
SecurityException, Thread.resume(), checkAccess()

destroy

public final void destroy()
销毁此线程组及其所有子组。此线程组必须为空,指示此线程组中的所有线程都已停止执行。

首先,不使用任何参数调用此线程组的 checkAccess 方法;这可能导致一个安全性异常。

抛出:
IllegalThreadStateException - 如果线程组不为空,或者线程组已经被销毁。
SecurityException - 如果当前线程不能修改此线程组。
从以下版本开始:
JDK1.0
另请参见:
checkAccess()

list

public void list()
将有关此线程组的信息打印到标准输出。此方法只对调试有用。

从以下版本开始:
JDK1.0

uncaughtException

public void uncaughtException(Thread t,
                              Throwable e)
当此线程组中的线程因为一个未捕获的异常而停止,并且线程没有安装特定 Thread.UncaughtExceptionHandler 时,由 Java Virtual Machine 调用此方法。

ThreadGroupuncaughtException 方法执行以下操作:

  • 如果此线程组有一个父线程组,那么调用此父线程组的 uncaughtException 方法时带有两个相同的参数。
  • 否则,此方法将查看是否安装了默认的未捕获异常处理程序,如果是,则在调用其 uncaughtException 方法时带有两个相同的参数。
  • 否则,此方法将确认 Throwable 参数是否为一个 ThreadDeath 实例。如果是,则不会做任何特殊的操作。否则,在从线程的 getName 方法返回时,会使用 ThrowableprintStackTrace 方法,将包含线程名称的消息和堆栈跟踪信息输出到标准错误流

应用程序可以重写 ThreadGroup 的子类中的方法,以提供处理未捕获异常的替代办法。

指定者:
接口 Thread.UncaughtExceptionHandler 中的 uncaughtException
参数:
t - 即将退出的线程。
e - 未捕获的异常。
从以下版本开始:
JDK1.0

allowThreadSuspension

@Deprecated
public boolean allowThreadSuspension(boolean b)
已过时。  此调用的定义取决于 suspend(),它被废弃了。更进一步地说,此调用的行为从不被指定。

由 VM 用于控制内存不足时的隐式挂起。

参数:
b - 允许或不允许挂起时的布尔值
返回:
如果成功,则返回 true
从以下版本开始:
JDK1.1

toString

public String toString()
返回此线程组的字符串表示形式。

覆盖:
Object 中的 toString
返回:
此线程组的字符串表示形式。
从以下版本开始:
JDK1.0