查看JVM中的线程

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890280.html "谢谢--

ThreadGroup(线程组)

1.一个线程的集合,也可包含其他线程组
2.线程组构成一棵树,除了初始化线程组外,每一个线程组都有一个父线程组
3.允许线程访问有关自己的线程组的信息,但不能访问其父线程组或其他线程组的信息
4.ThreadGroup类只能获得处于运行状态的线程

常用方法:
activeCount() 返回线程组中活动线程的估计数
activeGroupCount() 返回线程组中活动线程组的估计数
enumerate(Thread[] list,boolean recurse) 把此线程组中所有活动线程复制到指定数组中
enumerate(ThreadGroup[] list,boolean recurse) 把此线程组中所有活动子组的引用复制到指定的数组中
enumerate(Thread[] list) 把此线程组中所有活动线程复制到指定数组中
enumerate(ThreadGroup[] list) 把此线程组中所有活动子组的引用复制到指定的数组中
getName() 返回此线程组的名称
getParent() 返回此线程组的父线程组

代码例子:
package com.xhj.thread;

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

/**
* 查看JVM中的线程 获取线程名和子线程组
*
* @author XIEHEJUN
*
*/
public class CheckThreadJVM {

/**
* 获取根线程组
*
* @return
*/
public static ThreadGroup getRootThreadGroup() {
ThreadGroup rootGroup = Thread.currentThread().getThreadGroup();
while (true) {
if (rootGroup.getParent() != null) {
rootGroup = rootGroup.getParent();
} else {
break;
}
}
return rootGroup;
}

/**
* 获取线程组中的线程名
*
* @param group
* @return
*/
public static List<String> getThreadsName(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;
}

/**
* 获取根数组下的子数组
*
* @param group
* @return
*/
public static List<String> getThreadGroup(ThreadGroup group) {
List<String> threadList = getThreadsName(group);
ThreadGroup[] threads = new ThreadGroup[group.activeGroupCount()];
int count = group.enumerate(threads, false);
for (int i = 0; i < count; i++) {
threadList.addAll(getThreadsName(threads[i]));
}
return threadList;

}

public static void main(String[] args) {
for (String string : getThreadGroup(getRootThreadGroup())) {
System.out.println(string);
}
}

}

java笔记--关于多线程如何查看JVM中运行的线程的更多相关文章

  1. Java虚拟机笔记(五):JVM中对象的分代

    为什么要分代 为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用, ...

  2. ZooKeeper服务器是用Java创建的,它在JVM上运行。

    ZooKeeper服务器是用Java创建的,它在JVM上运行. 创建配置文件 使用命令 vi conf/zoo.cfg 和所有以下参数设置为起点,打开名为 conf/zoo.cfg 的配置文件. $ ...

  3. Java web 调试技巧之查看浏览器中调试中的network

    在java web开发过程中尤其后台开发经常需要查看浏览器调试中的network项:今天在开发在线预览系统时用到了flexpaper插件,这个插件会调用FlexPaperViewer.swf这个软件( ...

  4. 查看JVM中的线程名

    实例说明 在Java虚拟机中(JVM):除了用户创建的线程,还有服务于用户线程的其他线程.它们根据不同的用途被分到不同的组中进行管理.本实例将演示JVM中线程的名字及其所在组的名称. 关键技术 线程组 ...

  5. java笔记--关于多线程状态的理解和应用

    关于多线程的状态 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3890266.html  "谢谢-- 线程共有6种状态:1 ...

  6. 【java】【多线程】等待开启的多个线程都执行完成,再做事情,怎么实现

    今天在controller中写一个接口用来测试模拟多个请求同时到达 下订单的情况, 怎么能有效保证高并发下的库存和销量的一致性呢?[具体实现方法:https://www.cnblogs.com/sxd ...

  7. Java面试专题-多线程篇(2)- 锁和线程池

  8. 多线程(Thread类中的方法线程名称)

    1 package multithread; 2 3 /* 4 * 如何创建一个线程呢? 5 * 6 * 创建线程方式一:继承Thread类. 7 * 8 * 步骤: 9 * 1,定义一个类继承Thr ...

  9. 【java】使用jsp命令查看系统中java运行的程序及进程号

    对于java独立运行的程序,他们在进程中的名字都是 Java(TM) Platform SE binary,如图 我们想知道这个进程运行的是哪个程序,怎么办呢? 答案是:可以在命令行下,运行:jps命 ...

随机推荐

  1. Mac系统的下载(图文详解)

    不多说,直接上干货!   经常使用苹果电脑的网友们,有时候不免会遇到电脑系统崩溃的情况,在通过各种系统补救都无法修复苹果系统时,动手能力稍强的网友肯定会想到要重装系统,这时就需要去下载苹果系统,那么, ...

  2. Java的try-catch-finally

    Javac语法糖之TryCatchFinally 如下引用文章:https://help.semmle.com/wiki/display/JAVA/Finally+block+may+not+comp ...

  3. OpenGL12-shader(GLSL)着色语言3-(属性参数)(代码已上传)

    上一个例程中,使用了uniform 类型的变量,uniform可以理解为全局变量,这一节中使用 的是attribute类型的变量,翻译过来就是属性,他是与顶点绑定的,就意味着一个顶点可以 有很多个属性 ...

  4. Java代码实现单例模式

    public class Single { /*private static final Single single=new Single(); private Single(){} public s ...

  5. 安装Oracle需要调整的linux内核参数

    在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. Linux安装文档中给出的最小值: fs.aio-max-nr = 1048576 fs.file-m ...

  6. MapReduce几种提交方式

    本地模式运行 1.在Windows里的IDE直接运行main方法,会将job提交给本地执行器localjobrunner执行 ---本地存放Hadoop安装包 ---输入输出数据可以放在本地路径下(c ...

  7. 开始使用Newbe.Pct-Web自动化测试

    前篇介绍了,使用 Newbe.Pct 之前的准备工作.本篇将开始介绍如何使用本项目运行第一个测试用例. 阅前语 从本篇开始,读者将会接触到使用一些代码.希望读者不必纠结于语法本身.出现代码的地方都会伴 ...

  8. Golang xorm工具,根据数据库自动生成 go 代码

    使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段 ...

  9. ABP学习入门系列(三) (领域层中的仓储Repository)

    一,仓储定义:“在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象”(Martin Fowler) . 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层 ...

  10. ubuntu上使用vim编辑文本内容

    1. 什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.简单的来说, vi 是老式的字处理器,不过功能已经很齐全了, ...