当前位置: 首页 > 面试题库 >

Java:Swing库和线程安全

金高轩
2023-03-14
问题内容

我经常听到对Swing库中缺乏线程安全性的批评。但是,我不确定自己将在自己的代码中执行的操作会导致问题:

在什么情况下,Swing不是线程安全的事实起作用?

我应该积极避免做什么?


问题答案:
  1. 切勿执行长时间运行的任务以响应按钮,事件等,因为这些事件在事件线程上。如果您阻止事件线程,则整个GUI将完全无响应,从而使用户感到非常生气。这就是为什么Swing看起来缓慢又硬朗。

  2. 使用线程,执行程序和SwingWorker运行不在EDT(事件调度线程)上的任务。

  3. 不要在EDT之外更新或创建小部件。在EDT之外,您唯一可以做的就是Component.repaint()。使用SwingUtilitis.invokeLater以确保某些代码在EDT上执行。

  4. 使用EDT调试技术和灵巧的外观(例如Substance,它检查EDT违规情况)

如果遵循这些规则,Swing可以制作出一些非常有吸引力且具有响应性的GUI

一些非常出色的Swing UI工作示例:Palantir
Technologies
。注意:我不为他们工作,只是一个很棒的挥杆例子。不好意思,不要公开演示…他们的博客也很好,虽然稀疏,但是很好



 类似资料:
  • 该项目是使用Play framework和Scala语言编写的。我已经实现了编译时依赖关系。我在游戏中遵循了以下示例: https://github.com/playframework/play-scala-compile-di-example 查看MyApplicationLoader。scala: 以及以下代码行: 我的理解是,在第一次调用HomeController时,只创建了一个HomeC

  • 问题内容: 我正在寻找关于线程安全信息和。官方文档(http://docs.python.org/library/urllib2.html和http://docs.python.org/library/httplib.html)缺少有关此主题的任何信息。那里甚至没有提到 线程 一词… 更新 好的,它们不是线程安全的。使它们具有线程安全性需要什么,或者存在使它们具有线程安全性的情况?我问是因为好像

  • 问题内容: 在多个类中,是否是线程安全的? 问题答案: 尽管EntityManager实现本身不是线程安全的,但是Java EE容器注入了一个代理,该代理将所有方法调用委托给与事务绑定的EntityManager。因此,每个事务都使用其自己的EntityManager实例。至少对于事务范围的持久性上下文而言,这是正确的(默认设置)。 如果容器将在每个bean中注入EntityManager的新实例

  • 我的Spring项目中有一个简单的: 并按如下方式使用: 我是否必须注意线程安全并使同步(因为不是线程安全的)?我不确定到底是如何工作的--它是否只创建跨所有线程的单个序列化实例?还是为每个转换创建单独的实例?

  • 问题内容: 我正在编写一个Servlet,该Servlet通过访问和修改数据库中的某些表来处理每个请求。我希望与数据库的连接是线程安全的。我不想为此使用已经存在的库/框架(spring,hibernate等)。 我知道我可以通过以下方式为此使用java的ThreadLocal: 每次调用时,新连接都会添加到对象中,然后在释放连接时将其删除。 这是这样做的正确方法,还是它本身应该扩展类?还是有一种更

  • 问题内容: 我正在使用Spring Data(JPA)存储库来处理CRUD样板。 我这样定义我的存储库接口: 然后Spring自动为我生成上述接口的实现。我们得到的是代理,但我相信最终我们可以归结为。 如果 基础目标类是线程安全的, 则 A 是线程安全的。因此,问题是:线程安全吗? 问题答案: 通常,是的。假设是一个托管对象,我们将从Spring的工厂类(如果您使用Spring作为容器)或CDI托