【并发编程】一个最简单的Java程序有多少线程?
一个最简单的Java程序有多少线程?
通过下面程序可以计算出当前程序的线程总数。
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
public class MainTest {
public static void main(String[] args) {
// 计算方法1
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while (threadGroup.getParent() != null) {
threadGroup = threadGroup.getParent();
}
int totalThread = threadGroup.activeCount();
System.out.println("当前程序线程总数: " + totalThread);
Thread[] lstThreads = new Thread[totalThread];
threadGroup.enumerate(lstThreads);
for (int i = 0; i < totalThread; i++) {
System.out.println("线程号:" + lstThreads[i].getId() + " = " + lstThreads[i].getName());
}
// 计算方法2
// 获取java线程管理器MXBean,dumpAllThreads参数:lockedMonitors参数表示是否获取同步的monitor信息,
//lockedSynchronizers表示是否获取同步的synchronizer
ThreadInfo[] threadInfos = ManagementFactory.getThreadMXBean().dumpAllThreads(false, false);
for (ThreadInfo threadInfo : threadInfos) {
System.out.println("[" + threadInfo.getThreadId() + "]" + threadInfo.getThreadName());
}
}
}
上面有两种计算线程数的方式:
1、通过java线程管理器MXBean
2、直接通过线程组获取线程总数,要注意需要获取根线程组的总数,否则不准确
注意,如果JetBrain IJ来Run这个程序,结果会多一个线程Monitor Ctrl-Break。使用Debug运行不会出现。
计算结果:
当前程序线程总数: 5
线程号:2 = Reference Handler
线程号:3 = Finalizer
线程号:4 = Signal Dispatcher
线程号:5 = Attach Listener
线程号:1 = main
[5]Attach Listener
[4]Signal Dispatcher
[3]Finalizer
[2]Reference Handler
[1]main
解释如下,
[5]Attach Listener //添加事件
[4]Signal Dispatcher // 分发处理给JVM信号的线程
[3]Finalizer //调用对象finalize方法的线程
[2]Reference Handler //清除reference线程
[1]main //main线程,程序入口
上面
【并发编程】一个最简单的Java程序有多少线程?的更多相关文章
- Linux环境下部署完JDK后运行一个简单的Java程序
前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...
- JNI编程(一) —— 编写一个最简单的JNI程序
来自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- JNI编程(一) —— 编写一个最简单的JNI程序(转载)
转自:http://chnic.iteye.com/blog/198745 忙了好一段时间,总算得了几天的空闲.貌似很久没更新blog了,实在罪过.其实之前一直想把JNI的相关东西整理一下的,就从今天 ...
- 编写运行最简单的java程序——使用记事本编写java程序
第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. ...
- 那些年读过的书《Java并发编程实战》和《Java并发编程的艺术》三、任务执行框架—Executor框架小结
<Java并发编程实战>和<Java并发编程的艺术> Executor框架小结 1.在线程中如何执行任务 (1)任务执行目标: 在正常负载情况下,服务器应用 ...
- java基础学习02(简单的java程序)
简单的java程序 一.完成的目标 1. 理解java程序的基本组成 2. 如何对程序代码进行注释 3. java标识符的命名规则 4. 了解java中的关键字 5. 使用java定义变量或声明变量 ...
- MVVM之旅(1)创建一个最简单的MVVM程序
这是MVVM之旅系列文章的第一篇,许多文章和书喜欢在开篇介绍某种技术的诞生背景和意义,但是我觉得对于程序员来说,一个能直接运行起来的程序或许能够更直观的让他们了解这种技术.在这篇文章里,我将带领大家一 ...
- 如何使用eclipse运行简单的java程序
打开eclipse,选择“file——new——Java project” 为我们的java项目取一个名字,然后点击完成. 这时候左侧列表就有了我们刚才新建的java项目,点开项目,在src目 ...
随机推荐
- 监控 redis 执行命令
监控 redis 执行命令 Intro 最近在用 redis 的时候想看看执行了哪些命令,于是发现了 redis-cli 提供的 Monitor 命令,直接使用这个就可以监控执行的大部分 redis ...
- Vue一个案例引发「动画」的使用总结
项目开发中动画有着很重要的作用,而且也是用到的地方非常多,例如:鼠标的进入离开,弹窗效果,组件的显示隐藏,列表的切换等等,可以说我们网页上的动画无处不在,也有人说了,这些东西也可以不使用动画. 对,你 ...
- C++17剖析:string_view的实现,以及性能
主要内容 C++17标准发布,string_view是标准新增的内容.这篇文章主要分析string_view的适用范围.注意事项,并分析string_view带来的性能提升,最后从gcc 8.2的li ...
- Unity2018 Open C# Project Error
错误日志 升级到Unity2018之后,使用 Open C# Project 打开VS工程,出现报错,无法启动VS. 错误日志如下: ArgumentException: Value does not ...
- 重置Visual Studio 2017的配置
1,从命令行进入VS 2017安装目录下面的Common7\IDE文件夹. 例如,Windows 10系统中 VS 2017 企业版的默认安装目录如下: C:\Program Files (x86)\ ...
- 我的第一个python web开发框架(22)——一个安全小事故
在周末的一个早上,小白还在做着美梦,就收到了小美的连环追魂call,电话一直响个不停. 小白打着哈欠拿起电话:早上好美女. 小美:出事了出事了,我们公司网站一早访问是一片空白,什么内容都没有了,你赶急 ...
- hello随笔
初次来到博客园,都试一下 我明白了,随笔就是博客咯.日记自对自己可见.再试试分类吧
- vue 用less
https://blog.csdn.net/u013746071/article/details/79655042
- springboot mybatis搭建
非常easy直接写,没有搭建成分 1.目录 2. @RestController public class UserController { @RequestMapping("/hello& ...
- pytorch Debug —交互式调试工具Pdb (ipdb是增强版的pdb)-1-在pytorch中使用
参考深度学习框架pytorch:入门和实践一书第六章 以深度学习框架PyTorch一书的学习-第六章-实战指南为前提 在pytorch中Debug pytorch作为一个动态图框架,与ipdb结合能为 ...