java进程中有很multithreading

为什么简单的Java GUI应用程序会创建如此多的线程?

在此处输入图像描述

Java使用线程来做很多事情:

  • 当然是应用程序的主线程
  • 应用程序启动的任何线程(例如SwingWorker)
  • Swing有一个单独的Event调度线程以及一些其他内务线程
  • 定时器,其中一些可能会隐式启动
  • 垃圾收集的一个或多个线程
  • 我认为通常有一个单独的线程准备运行关闭钩子
  • 其他JVM内部的东西

简单的Java Swing GUI具有以下线程:

Thread [AWT-Shutdown] (Suspended) Object.wait(long) line: not available [native method] [local variables unavailable] Object.wait() line: 485 AWTAutoShutdown.run() line: 265 Thread.run() line: 619 Daemon Thread [AWT-Windows] (Suspended) WToolkit.eventLoop() line: not available [native method] [local variables unavailable] WToolkit.run() line: 295 Thread.run() line: 619 Thread [AWT-EventQueue-0] (Suspended) Object.wait(long) line: not available [native method] [local variables unavailable] EventQueue(Object).wait() line: 485 EventQueue.getNextEvent() line: 479 EventDispatchThread.pumpOneEventForFilters(int) line: 236 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122 Thread [DestroyJavaVM] (Suspended) 

如果您附加调试器,您可以看到名称并猜测自己,

但是线程可能是一个或两个垃圾收集线程,一些gui后台线程,如定时器,清理等。

此外,如果您启动jconsole(jdk中的免费Java应用程序)并连接到正在运行的java程序,还有一个“线程”选项卡,可以让您查看有多少线程,以及可以单击的线程列表了解更多信息。