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

时间:2010-02-10 18:01:06

标签: java multithreading jvmti

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

我可以找到以下主题:

  • DestroyJavaVM
  • AWT-EventQueue的-0
  • AWT-Shutdown
  • AWT-XAWT-守护程序线程
  • Java2D Disposer- Daemon Thread
  • Thread-0-守护程序线程[由JVMTI代理创建]
  • Signal Dispatcher-守护程序线程
  • Finalize-守护程序线程
  • 参考处理程序 - 守护程序线程

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

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

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

  • AWT-EventQueue-0

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

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

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

  • Java2D Disposer- Daemon Thread
  • Finalize-守护程序线程
  • 参考处理程序 - 守护程序线程