【问题标题】:Should I create a new instance of Java SwingWorker each time I want to invoke doInBackground()?每次我想调用 doInBackground() 时是否应该创建一个新的 Java SwingWorker 实例?
【发布时间】:2013-01-23 08:19:35
【问题描述】:

我的扩展 SwingWorker 类执行一个可能会重复发生的后台任务,该任务需要源自 GUI 的输入变量。

我看到了 2 个编码选项:

  1. 每次使用该类时都启动一个新实例并通过 构造函数的变量。我想我应该确保在那里 不是很多情况。如果有怎么办? multiton 还是其他方法?

  2. 更新变量并再次调用执行?如果是这样,我该怎么做 确定我没有打扰?

这些选项之一是可行的方法还是有更好的方法?

【问题讨论】:

  • 这个问题与多线程有什么关系,可能对潜在答案很重要
  • SwingWorker 不可重入,即不能再次执行

标签: java multithreading swing


【解决方案1】:

SwingWorker 是非进入的,这意味着你不能再次执行它,就像线程一样。

来自 JavaDocs

SwingWorker 仅设计为执行一次。执行一个 SwingWorker 多次不会导致调用 doInBackground 方法两次。

【讨论】:

    【解决方案2】:

    请使用选项 1。

    不可变对象通常更易于使用。例如,您可以防止在工作人员仍在工作时更新变量的问题,并且您不必考虑内存可见性。

    对象实例化在 Java 中相当便宜,所以这不会是性能问题,您可以在每次需要时创建一个新实例。

    【讨论】:

    • 谢谢,如果允许,我会在 5 分钟内批准。我如何衡量这种便宜?
    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2017-10-07
    • 2019-02-12
    相关资源
    最近更新 更多