【问题标题】:Why is not Swing "thread safe"? [closed]为什么 Swing 不是“线程安全的”? [关闭]
【发布时间】:2016-09-03 10:44:04
【问题描述】:

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

【问题讨论】:

标签: java multithreading swing thread-safety theory


【解决方案1】:

Javin Poul 的编程博客 Java Revisiteda great blog post 关于这个:

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

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

【讨论】:

  • 博文解决了我所有的疑惑,写的很详细,棒棒哒
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 2013-10-11
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多