2010-02-10 43 views
5

我创建了一个简单的Java应用程序,它有一个JFrame和几个JButton。当我尝试使用JVMTI检查Java应用程序时,发现虽然我没有创建任何明确的线程,但它们中的很多都产生了。什么是Java应用程序开始执行时spwaned的线程?

我能找到以下主题:

  • DestroyJavaVM
  • AWT-EventQueue的 - 0
  • AWT关断
  • AWT-XAWT-守护线程
  • 的Java2D Disposer-守护线程
  • 线程0守护线程[由JVMTI代理创建]
  • 信号Dispatcher-守护线程
  • Finalize-守护线程
  • 参考Handler-守护线程

他们大多是在可运行状态。有人能告诉我这些线程的功能吗?

回答

9

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

GUI应用程序通常有很多移动部件,如果您注意到您不必明确编写任何代码来管理这些部件(例如,更新屏幕或绘制按钮或处理鼠标移动)。是否这组后台线程负责管理这些部分,并尽可能简化您的工作以专注于您的应用程序逻辑。

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

1

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

  • AWT-EventQueue的 - 0

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

我真的希望Sun发布了一个“调试”版本的库,它在所有组件中声明了正确的线程使用情况 - 它可以节省很多头疼的事情,并且保证Java在崩溃GUI时有非常糟糕的REP真的是不明白这个主题的人。

这些可能都与螺纹垃圾收集器:

  • 的Java2D Disposer-守护线程
  • Finalize-守护线程
  • 参考Handler-守护线程
相关问题