每次我想调用doInBackground()时,我应该创建一个新的Java SwingWorker实例吗?

Rub*_*uck 5 java swing multithreading

我的扩展SwingWorker类执行可能重复发生的后台任务,该任务需要GUI发起输入变量.

我看到2个编码选项:

  1. 每次使用它时都要启动类的新实例并将变量传递给构造函数.我认为我应该确保没有很多情况.如果是这样的话?multiton或其他一些方法?

  2. 更新变量并再次调用execute?如果是这样,我如何确保我不打扰?

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

Mad*_*mer 5

SwingWorker是非参与者,意味着你不能再次执行它,就像Threads一样.

来自JavaDocs

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


Phi*_*ler 3

请使用选项 1。

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

Java 中的对象实例化非常便宜,因此这不会成为性能问题,并且每次需要时都可以创建一个新实例。