我们真的需要EDT吗?

时间:2013-01-05 12:42:13

标签: java multithreading swing thread-safety awt

我多次认为为什么Java强制我们在使用Swing时强制使用EDT? 从任何Swing更新Thread组件或换句话说multithreaded可能会更容易。

确实,SwingUtilities.invokeAndWaitSwingUtilities.invokeLater可以帮助我们 排队Swing事件,但是,如果GUI,它们将不会出现在图片中 组件可以从任何其他Thread更新。

并且,Java制造商是否真的忘记了Swing线程安全?

如果swing是多线程的,可能会出现什么问题? 我的Java程序已经“冻结”了十几次这个时间:/

1 个答案:

答案 0 :(得分:7)

  

如果swing是多线程的,可能会出现什么问题?让Java制造商真的忘记让Swing Thread-Safe?

已经进行了许多尝试来创建多线程GUI但most have failed因为它们不起作用或者使用起来过于复杂。单线程模型是标准和最简单的解决方案。

  

我的Java程序已经“冻结”了十几次这个

的时间

那是因为你没有按照你应该的方式使用Swing。它是单线程的事实并不妨碍你在另一个线程上运行长任务(你应该这样做以防止冻结)。您可以在Concurrency in Swing Tutorial中详细了解相关信息。特别是:

  

小心使用并发对Swing程序员来说尤为重要。一个写得很好的Swing程序使用并发来创建一个永远不会“冻结”的用户界面 - 无论它在做什么,程序总是响应用户交互。要创建响应式程序,程序员必须了解Swing框架如何使用线程。