题目💫:
查看JVM中线程的名称及其所在组的名称🤎
解题思路💫:
小王这里定义三个方法:
getRootThreadGroups();获得线程组
getThreads();获得给定线程组中所有线程名
getThreadGroups();获得线程组中所有线程
线程组:表示一个线程集合,还有线程组是可以包含线程其他线程组的
线程组构成一棵树,除了舒适化的线程组之外,每个线程都有一个父线程组
代码附上💟:
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); } } }
以上就是小王同学带来的多线程的相关知识