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

当Java应用程序开始执行时,这些线程是什么?,java,multithreading,jvmti,Java,Multithreading,Jvmti,我创建了一个简单的Java应用程序,它有一个JFrame和几个JButton。当我尝试使用JVMTI检查java应用程序时,我发现尽管我没有创建任何显式线程,但它们中有很多都是派生出来的 我可以找到以下线程: 销毁JavaVM AWT-EventQueue-0 AWT关机 AWT-XAWT-守护进程线程 Java2D处理器-守护进程线程 Thread-0-守护进程线程[由JVMTI代理创建] 信号调度器-守护进程线程 Finalize-Daemon线程 引用处理程序-守护进程线程 其中大多数

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

我可以找到以下线程:

  • 销毁JavaVM
  • AWT-EventQueue-0
  • AWT关机
  • AWT-XAWT-守护进程线程
  • Java2D处理器-守护进程线程
  • Thread-0-守护进程线程[由JVMTI代理创建]
  • 信号调度器-守护进程线程
  • Finalize-Daemon线程
  • 引用处理程序-守护进程线程

其中大多数处于可运行状态。有人能告诉我这些线程的功能吗?

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

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


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

我可以告诉您一个,并猜测三个

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

我真的希望Sun发布了一个“调试”版本的库,在所有组件中声明正确的线程用法——这样可以避免很多麻烦,也可以避免Java在真正不了解这个线程的人不了解GUI的情况下因为崩溃GUI而出现非常糟糕的表现

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

  • Java2D处理器-守护进程线程
  • Finalize-Daemon线程
  • 引用处理程序-守护进程线程