今天遇到了一个很有意思的问题:写一个最简单的打印 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
Hello Word!
5:Monitor Ctrl-Break
4:Signal Dispatcher
3:Finalizer
2:Reference Handler
1:main
$javac HelloDemo.java
$ java HelloDemo
Hello Word!
4:Signal Dispatcher
3:Finalizer
2:Reference Handler
1:main
IDEA 工具多了一个Monitor Ctrl-Break线程,Debug模式下不会有。