为什么不是Swing"线程安全"?

时间:2016-09-03 10:44:04

标签: java multithreading swing thread-safety theory

在关于线程的Java课程的最后几分钟,我们的教授建议我们在开发复杂的基于Swing的应用程序时要特别注意,因为Swing不是线程安全的。这背后有什么具体原因吗? Swing由于设计决策或软件限制而不是线程安全的? 提前感谢您的回答。

2 个答案:

答案 0 :(得分:6)

Javin Poul的编程博客Java Revisited对此有a great blog post

  

为什么Swing在Java中不是线程安全的?

     

这是当时设计师的决定。由于制作API线程安全需要大量工作,而且通常基于您获得的好处。由于GUI屏幕主要是响应用户动作而更新,例如当用户单击一个按钮,并且由于事件是在同一个事件调度程序线程中处理的,因此很容易在该线程上更新GUI。当GUI的更新请求来自不同的线程时,这是非常罕见的,例如可以是一旦网络请求完成或加载文件。

答案 1 :(得分:5)

大多数(如果不是全部)GUI工具包都不是线程安全的(Qt,Swing,Winforms ......)。创建一个线程安全的GUI工具包会增加太多不必要的复杂性。在大多数情况下,创建就足够了 快速事件处理程序。

例如,我们有一个计算按钮 从今天起40天的一周工作日,将摄氏温度转换为华氏温度,或计算提供值的总和。所有这些操作都可以很快计算出来。如果Swing是线程安全的,那么这些计算将放在单独的线程中,这显然是一种过度杀伤力。因此,我们只将长时间运行的任务放入线程中,例如刻录DVD,计算非常复杂的任务,下载大量文件等。

看到这个答案: Why are most UI frameworks single threaded?

相关问题