5

私の拡張SwingWorkerクラスは、GUIからの入力変数を必要とする、繰り返し発生する可能性のあるバックグラウンドタスクを実行します。

2つのコーディングオプションがあります。

  1. クラスを使用するたびにクラスの新しいインスタンスを開始し、変数をコンストラクターに渡します。多くのインスタンスがないことを確認する必要があると思います。もしそうなら、どのように?マルチトンまたは他の方法?

  2. 変数を更新し、executeを再度呼び出しますか?もしそうなら、どうすれば私が邪魔していないことを確認できますか?

これらのオプションの1つは進むべき道ですか、それとももっと良い方法がありますか?

4

2 に答える 2

5

SwingWorkerは非参加型です。つまり、スレッドとほとんど同じように、SwingWorkerを再度実行することはできません。

JavaDocsから

SwingWorkerは1回だけ実行されるように設計されています。SwingWorkerを複数回実行しても、doInBackgroundメソッドが2回呼び出されることはありません。

于 2013-01-23T08:36:17.833 に答える
3

オプション1を使用してください。

不変オブジェクトは通常、操作が簡単です。たとえば、ワーカーがまだ動作している間に変数が更新されるという問題を防ぎ、メモリの可視性についてあまり考える必要がありません。

Javaではオブジェクトのインスタンス化は非常に安価であるため、これはパフォーマンスの問題にはならず、必要になるたびに新しいインスタンスを作成できます。

于 2013-01-23T08:27:17.213 に答える