【问题标题】:Should non-Swing code be executed on non-EDT threads?非 Swing 代码是否应该在非 EDT 线程上执行?
【发布时间】:2014-05-29 15:00:57
【问题描述】:

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

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

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

【问题讨论】:

  • 不应在 EDT 上执行长时间运行的任务。它将导致 UI 变得无响应。这不是必需品,但您的客户会喜欢的。
  • @Paul Reiners 写道 - to a file and it sometimes does this on the EDT.,这是不对的,你必须决定它是否总是在 EDT 结束或永远不会,然后你可以选择你必须使用哪种方法使用,中间什么都没有,
  • 长时间运行是指运行时间超过 300 毫秒的代码。

标签: java swing event-dispatch-thread


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2014-03-31
    • 2023-03-16
    相关资源
    最近更新 更多