线程学习笔记(十一)-查看JVM中所有的线程和线程组
来源:互联网 发布:中华书局知乎 编辑:程序博客网 时间:2024/06/05 09:21
本实例介绍如何以树状结构查看Java虚拟机中所有的线程和线程组以及线程的优先级等信息。
查看Java虚拟机(JVM)中所有的线程和线程的技术要点如下:
虚拟机中的任何线程都处于线程组ThreadGroup中,线程组也可以包含子线程组。
Thread的currentThread静态方法能够获得当前线程的引用。
Thread的getThreadGroup实例方法能够获得当前线程所属的线程组。
ThreadGroup的getParent实例方法能够获得当前线程组的父线程组,根线程组的父线程组为null。
package core;public class TextRunningThread {//操作查看JVM虚拟机中所有的线程和线程组的类public static void listAllThreads(){//找到根线程组并列出它递归的信息ThreadGroup currentThreadGroup;//当前线程组ThreadGroup rootThreadGroup;//根线程组ThreadGroup parent;currentThreadGroup=Thread.currentThread().getThreadGroup();//获取当前活动线程所在的线程组rootThreadGroup=currentThreadGroup;//赋值给变量-根线程组parent=rootThreadGroup.getParent();//获取上级线程组/上级线程while(parent != null){//循环对根线程组重新赋值rootThreadGroup=parent;parent=rootThreadGroup.getParent();}showThreadGroup(rootThreadGroup, "");}public static void showThreadGroup(ThreadGroup group,String index){//显示线程组信息if(group == null) return;//线程组为空,直接返回int count=group.activeCount(); //获取活动的线程int countGroup=group.activeGroupCount();//获取活动的线程组数//System.out.println("活动的线程 : "+count);//System.out.println("活动的线程组数 : "+countGroup);Thread[] threads=new Thread[count];ThreadGroup[] groups=new ThreadGroup[countGroup];//把当前组下的所有活动线程/线程组的引用复制到指定数组中,false表示不包括对当前组下活动线程组的线程/线程组的引用group.enumerate(threads, false);//把线程放到当前的ThreadGroup中group.enumerate(groups, false);//把线程组放到当前的ThreadGroup中System.out.println(index+"线程组的名称- "+group.getName()+" 最高优先级- "+group.getMaxPriority()+(group.isDaemon()?" 守护":" "));for (int i = 0; i < count; i++) {showThread(threads[i],index+" ");// 展示ThreadGroup中所包含的线程的信息}for (int i = 0; i < countGroup; i++) {// 展示ThreadGroup中所包含的线程组的信息showThreadGroup(groups[i],index+" ");//递归调用方法展示ThreadGroup中所包含的线程组中的信息}}public static void showThread(Thread thread,String index){if(thread == null) return;System.out.println(index+"线程的名称-"+thread.getName()+" 最高优先级- "+thread.getPriority()+(thread.isDaemon()?" 守护":" ")+(thread.isAlive()?" 活动":" 不活动"));}public static void main(String[] args) {TextRunningThread.listAllThreads();}}
源程序解读
showThread()方法是显示线程的信息,包括线程的名称,优先级,是否为守护线程以及线程是否处在活动状态。
showThreadGroup()方法显示线程组的信息,ThreadGroup的activeCount()方法获得线程组中活动的线程数,activeGroupCount()获得活动的线程组数。根据线程数和线程组数分别创建数组和线程组数组。enumerate()方法把所有活动的子组的引用复制到指定数组中,false表示不包含对子组的所有活动子组的引用。运用循环调用showThread()方法显示每个线程的信息,再调用showThreadGroup()方法递归显示线程组中的线程信息,其中的第二个参数 index+" "用于把数据以树状列表展示。
listAllThreads()方法找到根线程组并列出它通过递归显示的信息。Thread类的currentThread()方法是获得当前线程。getThreadGroup()方法是获得当前活动的线程组。ThreadGroup类的getParent()方法获得根线程。运用根线程不为空条件进行循环,获得每个线程的根线程,再调用showThreadGroup()方法以树状结构展示线程信息。
阅读全文
0 0
- 线程学习笔记(十一)-查看JVM中所有的线程和线程组
- java 中 查看所有线程
- 十一、Android的线程和线程池
- 查看JVM线程状况
- 查看JVM中的线程
- 获取当前jvm下的所有线程
- websphere查看jvm线程的方法(线程转储)
- websphere查看jvm线程的方法(线程转储)
- Linux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- <转>Linux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- inux查看进程的所有子进程和线程
- Linux查看进程的所有子进程和线程
- idea、eclipse 启动maven项目异常-缺少xml文件或者properties文件
- leetcode 636. Exclusive Time of Functions
- 第十九篇:JAVA输入输出(IO)之文件
- 安装Pyhton,Django,Nginx及部署完整流程(有序)
- String的一些常用方法
- 线程学习笔记(十一)-查看JVM中所有的线程和线程组
- Maven镜像 阿里云mirror如何使用
- 图像数据转换成db(leveldb/lmdb)文件
- MyBatis开发环境的搭建
- 第二十篇:JAVA输入输出(IO)之字节流
- C++ Socket(一)
- 欢迎使用CSDN-markdown编辑器
- 第二十一篇:JAVA输入输出(IO)之字符流
- 第二十二篇:JAVA输入输出(IO)之常用流