Java运行main方法,会有多少个线程
2021-02-08 本文已影响0人
侧耳倾听y
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();