非Swing代码应该在非EDT线程上执行吗?

时间:2014-05-29 15:00:58

标签: java swing event-dispatch-thread

我知道Swing单线程规则(来自 Java Concurrency in Practice ):

  

应创建,修改和查询Swing组件和模型   仅来自事件派发线程。

反过来也是如此吗?我维护一些事务日志代码,将事件信息写入文件,有时在EDT上执行此操作。这是一种不好的做法吗?

1 个答案:

答案 0 :(得分:5)

这取决于你在做什么。基本上,当您使用EDT线程时,它不能做任何其他事情。这意味着按钮点击,处理,用户界面更新等都将停止。

因此,对于长时间运行的任务,您应该使用不同的线程(例如SwingWorker),但对于任何不太可能停滞或在EDT上花费很长时间的任何线程都可以。

相关问题