【问题标题】:SwingWorker - alternative in cases without Swing-GuiSwingWorker - 在没有 Swing-Gui 的情况下的替代方案
【发布时间】:2021-01-16 02:32:22
【问题描述】:

我真的很喜欢javax.swing.SwingWorker,它是一种处理多线程的简单方法。

现在我有一个没有任何 GUI 的服务器应用程序,我想使用 SwingWorker 之类的东西,以及 process()done()cancel() 等...方法。

我知道我可以只使用 swing worker 并且可能没有问题,但是 swing worker 显然还是打算与 swing-application 一起使用。

那么,有没有类似 swing worker 的东西打算用于更一般的情况,但几乎都是一样的?

如果不是这样,使用 Swing 工作者而不使用 Swing 有什么缺点? 我想到的是糟糕的代码风格和 done()process() - 在 EDT 中执行的方法。

【问题讨论】:

  • 如果你不使用 Swing,你就没有 EDT(好吧,至少 Swing 的 EDT,你可能有 一个 Event Dispatch Thread,但那将是那么别的东西)。您不需要在 Swing 之外使用 SwingWorker,因为它的主要实用程序在使用 Swing 时很有帮助。我建议阅读更多here
  • IMO SwingWorker 并不是关于处理多线程的。 IMO,它更多的是关于将长动作与 GUI 处理 (EDT) 分离。它允许您启动批处理作业并在批处理作业完成时呈现 GUI。在您的情况下,GUI 渲染的等价物是什么? docs.oracle.com/javase/7/docs/api/java/util/concurrent/… 会是什么开始吗?

标签: java multithreading swing swingworker


【解决方案1】:

大多数服务器框架都希望您不会尝试自己管理线程。这通常是由于它们的实现方式(作为事务、安全主体、记录器......的资源)可能是线程本地的。大多数 API 完全不是线程安全的,例如 JDBC 连接就不是。

例如J2EE restrictions 表示您不应该创建或管理线程。

【讨论】:

  • OP 没有说明他正在使用任何框架。 IMO 基于java.util.concurrent 编写具有多线程的服务器端应用程序是完全合法的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多