'main event loop' 在传统 java 应用程序中的外观如何 [JCIP 9.1]

How does looks 'main event loop' in legacy java apps [JCIP 9.1]

我正在阅读 java 并发实践。现在我达到了9.1章。但是我没有在 java.

上开发 GUI 应用程序

引自书本:

Why are GUIs Single-threaded?

In the old days, GUI applications were single-threaded and GUI events were processed from a "main event loop". Modern GUI frameworks use a model that is only slightly different: they create a dedicated event dispatch thread (EDT) for handling GUI events.

我过去不是开发人员,因此我不明白 'main event loop' 在 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 变慢。