创建ThreadGroup
ThreadGroup(String name);
ThreadGroup(ThreadGroup parent, String name);
创建线程时没有指定ThreadGroup则属于父线程的ThreadGroup。
public ThreadGroup(String name) {
this(Thread.currentThread().getThreadGroup(), name);
}
public ThreadGroup(ThreadGroup parent, String name) {
this(checkParentAccess(parent), parent, name);
}
ThreadGroup API
ThreadGroup 并不能提供对线程的管理,主要功能是对线程进行组织。
int activeCount();
获取group中活跃的线程,只是一个估计值,不能百分百正确。比如调用方法后有线程借结束了生命周期或者新的线程进入都会导致值有偏差。
int activeGroupCount();
获取group中活跃的子group,也是一个估计值。
int getMaxPriority();
获取group的优先级,在group中所有线程的优先级都不能大于group的优先级。
String getName();
获取group名称
ThreadGroup getParent();
获取group的父group,不存在则返回null
void list();
将group中活跃的线程信息全部输出
boolean parentOf(ThreadGroup g)
判断当前group是不是给定group的父group,如果给定的是自己返回也是true;
void setMaxPriority(int pri)
设置group的最大优先级,不能超过父group的最大优先级。改变的不止是当前group的最大优先级,还有所有子group最大优先级一起都会修改。
int enumerate(Thread list[]);
将ThreadGroup中所有活跃的线程全部复制到Thread数组中,并且把子group一起复制。返回的是活跃的线程数,一个预估值。
int enumerate(Thread list[], boolean recurse);
将ThreadGroup中所有活跃的线程全部复制到Thread数组中,recurse=true就把子group一起复制,false就不复制。返回的是活跃的线程数,一个预估值。
int enumerate(ThreadGroup[] list);
将ThreadGroup中所有活跃的子group全部复制到ThreadGroup数组中,并且把子group一起复制。返回的是活跃的子group数,一个预估值。
int enumerate(ThreadGroup[] list, boolean recurse);
将ThreadGroup中所有活跃的子group全部复制到ThreadGroup数组中,recurse=true就把子group一起复制,false就不复制。返回的是活跃的子group数,一个预估值。
void interrupt();
中断整个ThreadGroup中所有active线程,遍历了所有线程,执行线程的interrupt().
void destroy();
销毁ThreadGroup,只是针对ThreadGroup没有一个active线程进行一次destroy标记,并在父group中移除自己。
void setDaemon(boolean daemon);
设置ThreadGroup为守护ThreadGroup,不会影响ThreadGroup中线程的daemon属性,只会在ThreadGroup中没有任何一个active线程的时候自动调用 destroy();