Java中⽤ThreadGroup来表示线程组,我们可以使⽤线程组对线程进⾏批量控制。 ThreadGroup和Thread的关系就如同他们的字⾯意思⼀样简单粗暴,每个Thread必 然存在于⼀个ThreadGroup中,Thread不能独⽴于ThreadGroup存在。执⾏main() ⽅法线程的名字是main,如果在new Thread时没有显式指定,那么默认将⽗线程 (当前执⾏new Thread的线程)线程组设置为⾃⼰的线程组。
示例代码:
public class ThreadGroupTest {
public static void main(String[] args) {
String currentName = Thread.currentThread().getName();
String groupName = Thread.currentThread().getThreadGroup().getName();
System.out.println("线程名称: " + currentName + ", 所在线程组: " + groupName);
System.out.println();
ThreadGroup threadGroup = new ThreadGroup("root线程组");
Thread t1 = new Thread(threadGroup, new MyTask(), "线程-1");
Thread t2 = new Thread(threadGroup, new MyTask(), "线程-2");
t1.start();
t2.start();
}
}
class MyTask implements Runnable {
@Override
public void run() {
String currentName = Thread.currentThread().getName();
String groupName = Thread.currentThread().getThreadGroup().getName();
System.out.println("线程名称: " + currentName + ", 所在线程组: " + groupName);
}
}
输出结果:
线程名称: main, 所在线程组: main
线程名称: 线程-1, 所在线程组: root线程组
线程名称: 线程-2, 所在线程组: root线程组
执⾏main⽅法线程名字:main testThread当前线程组名字:main testThread线程名字:Thread-0 ThreadGroup管理着它下⾯的Thread,ThreadGroup是⼀个标准的向下引⽤的树状 结构,这样设计的原因是防⽌"上级"线程被"下级"线程引⽤⽽⽆法有效地被GC回收。