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

Pau*_*ers 3 java swing event-dispatch-thread

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

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

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

Tim*_*m B 5

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

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