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

ker*_*nic 0 java theory swing multithreading thread-safety

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

Dan*_*iel 6

Javin Poul的编程博客Java Revisited一篇很棒的博客文章:

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

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


Jan*_*nar 5

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

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

看到这个答案: 为什么大多数UI框架是单线程的?