java - 使用 Swing Timer 和 invokeLater 更新 Swing 组件时如何防止死锁?

标签 java swing timer deadlock invokelater

如果调用此方法的线程都使用 Swing Timer 或 SwingUtilities.invokeLater() ,则更新某些 Swing 组件的任意同步方法可能会发生死锁。我认为没有必要在 Swing Timer 任务中调用 invokeLater()。

所以我将有一些 Swing 计时器和一些更新我的组件的观察者。观察者都调用 invokeLater(),Swing Timers 直接调用我的任意方法 updateComponents()

如果仍然会导致死锁,invokeLater() 能否确保不会发生死锁?

最佳答案

由 Swing Timer 触发的操作以及提交给 invokeLater 的可运行对象,都在事件调度线程上按顺序执行,只要不涉及 invokeAndWait code>,没有其他线程正在等待操作完成。因此,仅此使用模式不会产生死锁。如果确实遇到死锁,原因将与 EDT 及其事件处理无关。

您不需要在任何事件回调中使用 invokeLater,其中包括提交给 Swing Timer 的事件回调,因为它们已经保证在事件调度线程上被调用。

关于java - 使用 Swing Timer 和 invokeLater 更新 Swing 组件时如何防止死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594886/

相关文章:

java - 在 JScrollPane 中包含两个 JLabel(一个在另一个之上)

c - 使用 MinGW C 的 Windows QueryPerformanceCounter

java - 有选择地删除小数

java - JSP 找不到 servlet 引用 (404)

java - 如何使用 super() 进行 Frame() 的内部构造?

Java JPanel动画

java - 在 Java/Groovy 中嵌入处理

hadoop - 使用 Java API 从 HDFS (Hortonworks Sandbox) 读取文件时出现异常

javascript - jQuery通过间隔、超时实现自动 slider

javascript - 使用javascript制作简单的计时器但出现奇怪的行为