谁创建了这些线程?

cpl*_*lus 0 java sockets debugging multithreading

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

在此输入图像描述

Ste*_*n C 7

您的屏幕截图中的线程如下:

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

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

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