首页 > 编程知识 正文

main方法是进程还是线程,一个线程可以创建一个或多个进程

时间:2023-05-06 15:16:59 阅读:32686 作者:702

先说结论:main方法启动后,jvm会开启多个守护线程,但main方法中的代码是被单线程执行的。

上面的代码:以下代码使用java提供的线程管理类ThreadMXBean的dumpAllThreads方法返回所有活动线程的线程信息,并打印线程id和名称。

公共类测试{ publicstaticvoidmain (字符串[ ] args ) throwsinterruptedexception { threadmxbeanthreadmxbeanm=management for (threadinfo threadinfo : thread infos ) system.out.println(id: ) threadinfo.getthreadid () threadname3360 )

从运行结果中可以看到,在启动main方法后,将创建6个线程:Monitor Ctrl-Break、Attach Listener、Signal Dispatcher、Finalizer、Reference Handler、main,即使多次启动,其顺序也不会改变。

这些线程是什么?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方法中的代码。

可以看到,除main线程以外的所有线程都是由jvm创建的守护程序线程,以确保java程序正常运行。

其实不仅仅是这些线程。 在调试模式下启动main方法时,执行结果如下。

在调试模式下运行main方法时,将添加三个符合JDWP协议的线程,以保证代码调试的正确性。 感兴趣的伴侣可以自己研究。

总之,main方法启动后,实际上就是jvm启动了。 jvm当然会创建多个线程来执行不同的任务。 main线程处理main方法中的代码,不存在多线程执行。

创作不易,你的点赞就是我输出的动力~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。