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

Java 非Swing代码应该在非EDT线程上执行吗?,java,swing,event-dispatch-thread,Java,Swing,Event Dispatch Thread,我知道Swing单线程规则(来自实践中的Java并发): 应创建、修改和查询Swing组件和模型 仅从事件调度线程 反之亦然?我维护一些将事件信息写入文件的事务日志代码,它有时会在EDT上这样做。这是一种不好的做法吗?这取决于你在做什么。基本上,当您使用EDT线程时,它不能执行任何其他操作。这意味着按钮点击、处理、用户界面更新等都将停止 因此,对于长时间运行的任务,您应该使用不同的线程(例如SwingWorker),但对于任何不可能在EDT上暂停或花费很长时间执行的任务,都可以。长时间运行的任务

我知道Swing单线程规则(来自实践中的Java并发):

应创建、修改和查询Swing组件和模型 仅从事件调度线程


反之亦然?我维护一些将事件信息写入文件的事务日志代码,它有时会在EDT上这样做。这是一种不好的做法吗?

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


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

长时间运行的任务不应该在EDT上执行。这将导致UI变得无响应。这不是必要的,但你的客户会欣赏它。”Paul Reiners在文件中写道:“代码>,有时它在EDT上执行。,这是不对的,你必须决定,如果它总是在EDT上结束或者永远不会,那么在你可以选择使用哪种方法之后,中间没有什么,只要长时间运行,我们指的是运行时间超过300毫秒的代码。