1.2 java程序启动至少会启动几个线程
2016-07-26 22:26:39
12,231
1
一个Java程序启动至少启动几个线程?这是一个很常见的面试题。网上大部分的回答都是2个。以下截图来自百度知道:
事实上,这个分析是没有错的。对于大部分人来说,对于Java中的垃圾回收机制都是有所了解的。不过这个答案只是回答了至少有几个,并没有回答到底有几个。要想弄明白到底有几个线程会被启动,最佳的方法是自己动手实践。
public class ThreadNumDemo { public static void main(String[] args) { ThreadMXBean threadMXBean =ManagementFactory.getThreadMXBean(); ThreadInfo[] threadInfos=threadMXBean.dumpAllThreads(false,false); for (ThreadInfo threadInfo : threadInfos) { System.out.println(threadInfo.getThreadId()+"-"+threadInfo.getThreadName()); } } }
这段代码的作用是打印出当前JVM中运行的所有线程信息,这使用到了JMX的API,读者不必关注,只要看运行的结果即可。
5-Attach Listener 4-Signal Dispatcher //分发处理发送给JVM信号的线程 3-Finalizer //调用对象的finalize方法的线程,就是垃圾回收的线程 2-Reference Handler //清除reference的线程 1-main //主线程 |
可以看到,当一个java进程启动的时候至少会开启以上的这些线程。不过需要注意的是,这是在JDK1.8中运行的结果,不同版本的JDK运行的结果可能会不同。
希望读者可以简单的记忆一下这些线程,毕竟面试的时候会被经常问到这个问题,如果你都能说出来,肯定会加分的。
上一篇:1.1 创建并运行Java线程
下一篇:1.3 什么是当前线程