今天遇到了一个很有意思的问题:写一个最简单的打印 HelloWorld 的程序,说说看,运行这个应用,Java 至少会创建几个线程呢?
使用MXBean 管理器
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Word!");
//获取threadMXBean
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
long[] allThreadIds = threadMXBean.getAllThreadIds();
//根据ThreadId获取线程信息
ThreadInfo[] threadInfos = threadMXBean.getThreadInfo(allThreadIds);
for (ThreadInfo threadInfo:threadInfos) {
//打印线程id和线程名称
System.out.println(threadInfo.getThreadId()+":"+threadInfo.getThreadName());
}
}
}
运行环境
JDK 1.8
- IDE 运行结果
Hello Word!
5:Monitor Ctrl-Break
4:Signal Dispatcher
3:Finalizer
2:Reference Handler
1:main
- java 运行文件
$javac HelloDemo.java
$ java HelloDemo
Hello Word!
4:Signal Dispatcher
3:Finalizer
2:Reference Handler
1:main
- Reference Handler : 处理对象引用本身的垃圾回收
- Finalizer : 处理用户的finalizer方法
- Signal Dispatcher :外部jvm命令转发器
IDEA 工具多了一个Monitor Ctrl-Break线程,Debug模式下不会有。
网友评论