在旧版 Java 应用程序中的外观如何'main event loop' [JCIP 9.1]



我在实践中正在阅读Java Consuremcy。现在我取得了9.1章。但是我没有在Java上开发GUI申请。

书籍的报价:

为什么GUIS单线读取?

在过去,GUI申请是单线程和GUI事件 是从"主要事件循环"处理的。现代GUI框架使用 仅略有不同的模型:它们创建了一个专门的事件 用于处理GUI事件的派遣线程(EDT)。

我在过去不是开发人员,因此我不明白GUI应用中的"主要事件循环"是什么意思。Google也没有回应我的明确解释。

您能说明这种遗留技术的例子吗?是否有用于制作和消费任务的队列?

是的,在这两种情况下,任务都在等待处理,而线程则一个一个人执行任务。

主事件循环是指一个专用线程,在循环中,该线程处理应用程序的所有任务,既与UI"以及应用程序的所有其他方面(例如I/O和数值计算)。该编程模型很方便,因为单线螺纹不需要线程同步。无论如何,在过去,计算机具有单个CPU,多线程不会产生太大影响。

如今,事件调度线程(EDT)仅处理UI请求,允许并行运行I/O和数值计算。通常,这需要线程同步,但是与EDT的通信仍然很简单:

SwingUtilities.invokeLater(new Runnable() {
  @Override
  public void run() {
    //Code to change Swing data.
  }
});

您仍然可以将EDT用于应用程序的所有任务,不仅是UI,如果您的应用程序轻巧并且超载EDT不会使UI慢。

相关内容

最新更新