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

时间:2013-01-23 08:19:35

标签: java multithreading swing

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

我看到2个编码选项:

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

  2. 更新变量并再次调用execute?如果是这样我该怎么做 我确定不打扰?

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

2 个答案:

答案 0 :(得分:5)

SwingWorker是非参与者,这意味着你不能再次执行它了,就像线程一样。

来自JavaDocs

  

SwingWorker只能执行一次。执行一个   SwingWorker不止一次不会导致调用   doInBackground方法两次。

答案 1 :(得分:3)

使用选项1。

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

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