当Java应用程序开始执行时,这些线程是什么?

我创建了一个简单的Java应用程序,它有一个JFrame和几个JButtons。 当我尝试使用JVMTI检查java应用程序时,我发现虽然我没有创建任何显式线程但是它们中有很多产生。

我可以找到以下主题:

  • DestroyJavaVM
  • AWT-EventQueue的 – 0
  • AWT关断
  • AWT-XAWT-守护程序线程
  • Java2D Disposer-守护程序线程
  • Thread-0-守护程序线程[由JVMTI代理创建]
  • Signal Dispatcher-守护程序线程
  • 敲定 – 守护程序线程
  • 参考处理程序 – 守护程序线程

他们中的大多数都处于Runnable状态。 有人能告诉我这些线程的function吗?

底层库使用这些线程来管理图形应用程序所需的窗口小部件,显示,事件循环和其他管道。

GUI应用程序通常包含许多移动部件,如果您注意到您不必显式编写任何代码来管理这些部件(例如,更新屏幕,绘制按钮或处理鼠标移动)。 是这组后台线程负责管理这些部分,并使您尽可能轻松地专注于您的应用程序逻辑。

这些线程由您使用的库(例如,AWT,Swing等)生成,并且通常在终止时自行清理(以及它们管理的资源)。

我可以告诉你一个,猜三个……

  • AWT-EventQueue的 – 0

这是GUI / Awt / Swing线程。 写入GUI的任何内容都必须在此线程上执行! 有时候,如果我认为另一个线程可能会写入GUI,我会到达我认为可能发生争用的点,并断言当前线程的名称与“AWT-EventQueue-0”匹配。

我真的希望Sun发布了一个“调试”版本的库,它在所有组件中声明了正确的线程使用 – 它可以节省很多麻烦,并且保存Java,因为它真的很糟糕,因为它有一个非常糟糕的REP来崩溃GUI。不了解这个post。

这些可能都与线程垃圾收集器有关:

  • Java2D Disposer-守护程序线程
  • 敲定 – 守护程序线程
  • 参考处理程序 – 守护程序线程