【问题标题】:Who have created these threads?谁创建了这些线程?
【发布时间】:2019-05-17 16:54:45
【问题描述】:

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

【问题讨论】:

标签: java multithreading sockets debugging


【解决方案1】:

你截图中的线程如下:

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

这些线程都是JVM自己创建的。

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

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2011-09-02
    • 2013-09-30
    • 2019-04-24
    • 2014-04-21
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多