查看JVM中线程的名称及其所在组的名称🤎
小王这里定义三个方法:
线程组:表示一个线程集合,还有线程组是可以包含线程其他线程组的
线程组构成一棵树,除了舒适化的线程组之外,每个线程都有一个父线程组
package cn.xiaoxuzhu.daily;
import java.util.ArrayList;
import java.util.List;
/**
* @author 小王同学
* @version 1.0
* @Description:
*查看JVM中线程的名称及其所在组的名称🤎
*
* 思路:
* getRootThreadGroups();获得线程组
* getThreads();获得给定线程组中所有线程名
* getThreadGroups();获得线程组中所有线程
*
*/
public class ThreadList {
private static ThreadGroup getRootThreadGroups(){ //获得根线程组
ThreadGroup rootGroup=Thread.currentThread().getThreadGroup();//获得当前线程组
while(true){
if(rootGroup.getParent()!=null){ //如果getParent()返回值非空则不是根线程组
rootGroup=rootGroup.getParent(); //获得父线程组
}else {
break; //如果达到根线程则退出循环
}
}
return rootGroup;
}
public static List<String >getThreads(ThreadGroup group){ //获得给定线程组中所以线程名
List<String >threadList=new ArrayList<String>(); //创建保存线程名的列表
Thread[]threads=new Thread[group.activeCount()];//根据活动线程创建线程数组
int count=group.enumerate(threads,false);//复制线程到线程数组
for(int i=0;i<count;i++){ //遍历线程组将线程组名及其所在组保存到列表中
threadList.add(group.getName()+"线程组:"+threads[i].getName());
}
return threadList; //返回列表
}
public static List<String >getThreadGroups(ThreadGroup group){ //获得线程组中所有线程
List<String >threadList=getThreads(group);// 获得给定线程数组中的线程名
ThreadGroup[]groups=new ThreadGroup[group.activeGroupCount()]; //创建线程组数组
int count=group.enumerate(groups,false); //复制子线程组到线程组数据
for(int i=0;i<count;i++){ //遍历所有子线程组
threadList.addAll(getThreads(groups[i]));
}
return threadList; //返回所有子线程名
}
public static void main(String[] args) {
for(String string:getThreadGroups(getRootThreadGroups())){
System.out.println(string);
}
}
}
以上就是小王同学带来的多线程的相关知识