谁创建了这些线程?

时间:2018-12-17 10:29:31

标签: java multithreading sockets debugging

我是Java的新手,我发现了一件有趣的事情。现在,我正在学习套接字,并且在调试程序时,我注意到我并没有创建几个线程。然后,在程序的开头放置一个断点,当我打开线程时,我可以看到属于Socket的所有线程。但是我还没有创建它,因为它是第一行代码。我现在想知道那些线程来自何处,以及为什么如果仍未创建套接字,为什么已经创建了它们。

enter image description here

1 个答案:

答案 0 :(得分:4)

屏幕截图中的线程如下:

  • “主”线程是为运行main方法而创建的线程。
  • “附加侦听器”线程是由JVM创建的,用于接受与JVM调试代理的连接。
  • “ Common Cleaner”线程与Java 9 Cleaner机制相关,这是对对象删除进行整理的更好方法。
  • “终结器”线程在GC排队的无法访问的对象上运行finalize方法。
  • “引用处理程序”线程对由GC排队的Reference个对象执行处理。
  • “信号分配器”线程处​​理本机信号(例如SIGINT,SIGHUP等)。显然,由于与信号相关的本机API的工作方式,这些需要由专用(本机)线程处理。

这些线程都是由JVM本身创建的。

JVM也具有一个或多个本机GC线程,但是显然它们没有显示在清单中。我认为这是因为它们没有相应的Thread对象。 (它们……很特别!)