先说结论:main方法启动后,jvm会开启多个守护线程,但main方法中的代码是被单线程执行的。
public static void main(String[] args) throws InterruptedException {
ThreadMXBean threadMXBeanm = ManagementFactory.getThreadMXBean();
ThreadInfo[] threadInfos = threadMXBeanm.dumpAllThreads(false, false);
for(ThreadInfo threadInfo : threadInfos){
System.out.println("id:" + threadInfo.getThreadId() + " Thread Name :[" + threadInfo.getThreadName() + "]");
}
}
另一种方法
Thread.currentThread().getThreadGroup().getParent().list();
线程类型
1、Monitor Ctrl-Break
Monitor Ctrl-Break是idea创建的监视线程,如果直接在javac上编译并运行,则没有此线程。 下图:
2、Attach Listener
attach监听器线程的主要工作是一系列过程,过程步骤包括接收客户端命令、分析命令、搜索命令执行器和执行命令。
3、Signal Dispatcher
Signal Dispatcher线程将附着监听器线程接收到的命令分发给各种模块,并返回处理结果。
4、Finalizer
Finalizer线程主要处理JVM垃圾回收。
5、Reference Handler
参考处理程序线程的主要功能是处理pending链表中的引用对象,也是帮助JVM进行gc操作。
6、main
负责执行主线程,也就是main方法中的代码