线程组
Thread线程类中toString方法的定义
public String toString() {
ThreadGroup group = getThreadGroup();//获取当前线程对象所属的线程组
if (group != null) {
return "Thread[" + getName() + "," + getPriority() + "," + group.getName() + "]";
} else {
return "Thread[" + getName() + "," + getPriority() + "," + "" + "]";
}
}
所有线程都隶属于一个线程组。那可以是一个默认线程组【main】,亦可是一个创建线程时明确指定的组
说明 :
(1)在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组 ;
(2)若创建多个线程而不指定一个组,它们就会与创建它的线程属于同一个组
public Thread(ThreadGroup group, Runnable target)
public Thread(ThreadGroup group, String name)
public Thread(ThreadGroup group, Runnable target, String name)
ThreadGroup myThreadGroup = new ThreadGroup("My Group");//创建线程组
Thread myThread = new Thread(myThreadGroup,"a thread"); //定义线程时指定对应的线程组
theGroup = myThread.getThreadGroup();//获取线程对象所属的线程组
ThreadGroup group=new ThreadGroup("yan1");
Thread t1=new Thread(group,
()->{
for(int i=0;i<100;i++)
System.err.println(Thread.currentThread());
} );
t1.start();
System.out.println(Thread.currentThread());
//线程组的用途
ThreadGroup tg=Thread.currentThread().getThreadGroup();
int cc=tg.activeCount();//获取所有活跃线程线程数
Thread[] list=new Thread[cc];
tg.enumerate(list);//获取所有获取线程,并存放在Thread[]中
for(Thread temp:list)
System.out.println(temp);
tg.list();
//以树装结构显示当前的所有线程组
主要通途:可以通过线程组,对线程组中一组线程进行统一管理,而不是一个一个的管理。注意显示线程时,如果 线程显示为null表示线程已经消亡(执行结束)。在具体开发中很少使用