Java中启动一个main方法会有几条线程?

五条如下:

public static Logger logger=Logger.getLogger(Thread.currentThread().getStackTrace()[1].getClassName());

public static void main(String[] args) {

    //获取Java中的线程工厂 获取Java虚拟中线程Bean

        ThreadMXBean tmxb = ManagementFactory.getThreadMXBean();

        //获取所有线程

        ThreadInfo[] threadInfos=tmxb.dumpAllThreads(false, false);

        //循环打印

        for(ThreadInfo threadInfo:threadInfos) {

        logger.log(Level.INFO,"threadName-->"+threadInfo.getThreadName());

        }

}

打印结果


Attach Listener:线程是负责接收到外部的命令,而对该命令进行执行的,并且把结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反馈信息,如:java -version、jmap、jstack等等。如果该线程在jvm启动的时候没有初始化,那么,则会在用户第一次执行jvm命令时,得到启动。

Signal Dispatcher: 前面我们提到第一个Attach Listener线程的职责是接收外部jvm命令,当命令接收成功后,会交给Signal Dispatcher线程去进行分发到各个不同的模块处理命令,并且返回处理结果。Signal Dispatcher线程也是在第一次接收外部 JVM 命令时,进行初始化工作。

Finalizer:Finalizer线程 用来执行所有对象的finalize() ;


Reference Handler:它主要用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收问题。

main:自己启动的线程。

你可能感兴趣的:(Java中启动一个main方法会有几条线程?)