【每日打卡贴】《JAVA筑基100例》【第68题】JAVA高级技术-多线程2(查看JVM中的线程名)

李慢慢 2022-05-28 20:50:08

题目

题目:查看JVM中线程的名称及其所在组的名称

解题思路

创建一个类:ThreadList

定义3个方法:

getRootThreadGroups():获得根线程组

getThreads() :获得给定线程组中所有线程名

getThreadGroups():获得线程组中所有线程

线程组:表示一个线程的集合。还有线程组是可以包含其他线程组的。

线程组构成一棵树,除了初始化的线程组外,每个线程组都有一个父线程组。

代码实现

package basic.example;

import java.util.ArrayList;
import java.util.List;

/**
 * Description: 如何描述该类
 *  
 * @author hongzx
 * @date 2022/5/28
 * @version 1.0
 * 
 * <pre>
 * 修改记录:
 * 修改后版本   修改人       修改日期         修改内容
 * 2022/5/28      hongzx    2022/5/28    Create
 * </pre>
 *
 */
public class BasicFor68 {

    static class ThreadList{
        /**
         * 获取根线程组
         *
         * @return
         */
        private static ThreadGroup getRootThreadGroups() {
            ThreadGroup rootGroup = Thread.currentThread().getThreadGroup();
            while (true) {
                if (rootGroup.getParent() != null) {
                    rootGroup = rootGroup.getParent(); // 获得父线程组
                }else{
                    break;
                }
            }
            return rootGroup;
        }

        /**
         * 获取线程组中所有线程名
         *
         * @param threadGroup
         * @return
         */
        public static List<String> getThreads(ThreadGroup threadGroup) {

            List<String> threadList = new ArrayList<String>();
            Thread[] threads = new Thread[threadGroup.activeCount()];// 获取活动线程数
            int count = threadGroup.enumerate(threads, false);//复制线程到线程组
            for (int i = 0; i < count; i++) {
                threadList.add(threadGroup.getName() + "线程组:" + threads[i].getName());
            }
            return threadList;
        }

        /**
         * 获取线程组中所有线程
         *
         * @param threadGroup
         * @return
         */
        public static List<String> getThreadGroups(ThreadGroup threadGroup) {

            List<String> threadList = getThreads(threadGroup);
            ThreadGroup[] threadGroups = new ThreadGroup[threadGroup.activeCount()];
            int count = threadGroup.enumerate(threadGroups, false);//复制线程到数组
            for (int i = 0; i < count; i++) {
                threadList.addAll(getThreads(threadGroups[i]));
            }
            return threadList;
        }

        public static void main(String[] args) {
            for (String str : getThreadGroups(getRootThreadGroups())) {
                System.out.println(str);
            }
        }
    }


}

结果截图

 

...全文
42 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-Java 发布问题, 以便更快地解决您的疑问

124,524

社区成员

发帖
与我相关
我的任务
社区描述
越努力越幸运,一个人努力可以走得很快,一群人努力,可以走得很远,准备好一起成为架构师了嘛!
社区管理员
  • 小虚竹
  • 阿莫 夕林
  • java李杨勇
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

【十日集训】十日训练营活动正式开始!和小虚竹一起,打卡学习,从入门到大佬,准备好一起成为JAVA架构师了嘛!!

【添加微信】备注1024,加入小虚竹JAVA微信交流群,一起学习交流进大厂

试试用AI创作助手写篇文章吧