【问题标题】:What are these threads which are spwaned when a Java application begins its execution?当 Java 应用程序开始执行时,这些线程是什么?
【发布时间】:2011-01-15 09:37:36
【问题描述】:

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

我可以找到以下主题:

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

它们中的大多数处于 Runnable 状态。谁能告诉我这些线程的功能?

【问题讨论】:

    标签: java multithreading jvmti


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      • AWT-EventQueue-0

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

      我真希望 Sun 发布了一个“调试”版本的库,该版本在所有组件中断言正确的线程使用——它会省去很多麻烦,并使 Java 避免使用非常糟糕的 REP 导致 GUI 崩溃真的是不了解这个线程的人。

      这些大概都和线程垃圾收集器有关:

      • Java2D Disposer- 守护线程
      • Finalize- 守护线程
      • 引用处理程序 - 守护线程

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        相关资源
        最近更新 更多