美文网首页
Java运行main方法,会有多少个线程

Java运行main方法,会有多少个线程

作者: 侧耳倾听y | 来源:发表于2021-02-08 22:31 被阅读0次
public static void main(String[] args) {
        
}

上面的代码在运行时,会创建多少个线程呢?答案是5(6)个。

Java中有线程组的概念,一个线程组可以包含线程和线程组。请看如下代码,打印出main方法运行时候的所有线程信息

public static void main(String[] args) {

  Thread.currentThread().getThreadGroup().getParent().list();

}

打印出来的结果(JDK8,idea):

java.lang.ThreadGroup[name=system,maxpri=10]
    Thread[Reference Handler,10,system]
    Thread[Finalizer,8,system]
    Thread[Signal Dispatcher,9,system]
    Thread[Attach Listener,5,system]
    java.lang.ThreadGroup[name=main,maxpri=10]
        Thread[main,5,main]
        Thread[Monitor Ctrl-Break,5,main]

可以看出来,main方法运行时,会有两个线程组:

  • 名为sytem,优先级为10的线程组:
    1.线程Reference Handler,用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收问题
    2.线程Finalizer,用于垃圾收集前,调用对象的finalize方法
    3.线程Attach Listener,负责接收到外部的命令,并把结果返回给发送者,例如jmap、jstack
    4.线程Signal Dispatcher,上一个线程(Attach Listene)接收到指令,会交给该线程去进行分发到各个模块处理命令,并返回结果

  • 名为main,优先级为10的线程组,system包含main:
    5.线程mian,执行代码的线程
    6.线程Monitor Ctrl-Break,idea运行时,会出现该线程,windows运行并没有该线程。作用似乎是和dump有关...

当main方法运行时,会有system线程组,main线程组,mian被包含在system内。还有以下方法,可以查看

// 查看main线程组信息
Thread.currentThread().getThreadGroup().list();
// 查看活跃的线程数,如果在idea只运行一个main方法,这个数量就是2
Thread.activeCount();

相关文章

网友评论

      本文标题:Java运行main方法,会有多少个线程

      本文链接:https://www.haomeiwen.com/subject/brgfxltx.html