gpt4 book ai didi

java - 'main event loop' 在旧版 Java 应用程序中看起来如何 [JCIP 9.1]

转载 作者:行者123 更新时间:2023-12-01 08:48:49 24 4
gpt4 key购买 nike

我正在实践中阅读java concuremcy。现在我达到了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.

我以前不是开发人员,因此我不明白 GUI 应用程序中的“主事件循环”是什么意思。谷歌也没有回复我明确的解释。

您能展示这种传统技术的示例吗?是否有生产和消费任务的队列?

最佳答案

是的,在这两种情况下,都有一个任务等待处理的队列,以及一个逐个执行该任务的线程。

主事件循环是指一个专用线程,它在循环中处理应用程序的所有任务,既与 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 变慢。

关于java - 'main event loop' 在旧版 Java 应用程序中看起来如何 [JCIP 9.1],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com