0

Executor で SwingWorker を実行しようとしています。これらのタスクをスレッド プール サイズ 1 で実行/送信すると、タスクは完全に実行されます。

ただし、スレッド プール サイズが 1 より大きいタスクを実行すると、NullPointerException と OutOfBoundsException をカプセル化した ExecutionException が発生します。これらの例外は、タスクが連続して実行される場合には発生しません。

すべてのタスクは共通の構成ファイルを共有していました。独自の構成ファイルを使用するように変更しました。これにより、スレッドの安全性が損なわれる問題が 1 つ解消されることを期待していました。

残念ながら、非同期で呼び出しているライブラリのソース コードにアクセスできません。

本当に 2 つの質問があります。

1)。SwingWorker スレッドはリソースを共有しますか? 私の問題は、シングルトンなどと呼んでいるライブラリにスレッドセーフがないことが原因であると思います。

2)。ExecutorService で SwingWorker を使用することの適合性について、さらにコメントできる人はいますか? 怖い話はありますか?私が SwingWorker を使用している理由は、これらすべてが GUI の下にあり、将来的に進行状況の更新を表示できるようにしたいからです。これが、代わりにグアバの ListenableFuture を使用することを妨げている理由ですが、誰かが更新を進めるための良い解決策を持っているなら、私はそれを受け入れます。

ありがとう

4

0 に答える 0