我在实践中阅读java concuremcy。现在我实现9.1章。但是我没有在java上开发GUI应用程序。
从书中引用:
为什么GUI是单线程的?
在过去,GUI应用程序是单线程和GUI事件 从“主要事件循环”处理。现代GUI框架使用a 模型只是略有不同:它们创建一个专门的事件 调度线程(EDT)用于处理GUI事件。
我以前不是开发人员,因此我不明白GUI应用程序中的'主事件循环'是什么意思。谷歌也没有回复我的明确解释。
你能举例说明这种传统技术吗?是否有生产和消费任务的队列?
答案 0 :(得分:1)
是的,在这两种情况下都有一个等待处理任务的队列,以及一个一个地执行这些任务的线程。
主事件循环是指一个专用线程,它在一个循环中处理应用程序的所有任务,这两个任务都与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变慢。