1:简答说明
ThreadGroup是用来管理一组线程的,可以控制线程的执行,查看线程的执行状态等操作,方便对于一组线程的统一管理。
2:构造函数
2.1:Thread构造函数
在创建Thread时可以指定Thread所属的ThreadGroup,其中相关的构造函数如下:
public Thread(ThreadGroup group, Runnable target) {
init(group, target, "Thread-" + nextThreadNum(), 0);
}
public Thread(ThreadGroup group, Runnable target, String name) {
init(group, target, name, 0);
}
public Thread(ThreadGroup group, Runnable target, String name,
long stackSize) {
init(group, target, name, stackSize);
}
public Thread(ThreadGroup group, String name) {
init(group, null, name, 0);
}
2.2:ThreadGroup构造函数
public ThreadGroup(String name) {
this(Thread.currentThread().getThreadGroup(), name);
}
public ThreadGroup(ThreadGroup parent, String name) {
this(checkParentAccess(parent), parent, name);
}
private ThreadGroup(Void unused, ThreadGroup parent, String name) {
this.name = name;
this.maxPriority = parent.maxPriority;
this.daemon = parent.daemon;
this.vmAllowSuspension = parent.vmAllowSuspension;
this.parent = parent;
parent.add(this);
}
3:例子
public class MyThreadGroupTest {
public static void main(String[] args) {
ThreadGroup myThreadGroup = new ThreadGroup("dongshidadddy线程组");
for (int i = 0; i < 5; i++) {
new Thread(myThreadGroup, Go::doGo, i + "号线程").start();
}
System.out.println("活跃线程数:" + myThreadGroup.activeCount());
System.out.println("线程组信息:");
myThreadGroup.list();
}
}
class Go {
public static void doGo() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " run");
}
}
运行:
活跃线程数:5
线程组信息:
java.lang.ThreadGroup[name=dongshidadddy线程组,maxpri=10]
Thread[0号线程,5,dongshidadddy线程组]
Thread[1号线程,5,dongshidadddy线程组]
Thread[2号线程,5,dongshidadddy线程组]
Thread[3号线程,5,dongshidadddy线程组]
Thread[4号线程,5,dongshidadddy线程组]
2号线程 run
1号线程 run
3号线程 run
0号线程 run
4号线程 run