4

私は 2 つの長時間実行される SwingWorker タスクを使用するアプリケーションを持っています。そのうちの 1 つだけを開始する、更新された JVM を備えた 2 台の Windows コンピューターに遭遇しました。エラーは表示されていないため、デフォルトのスレッド プールにはスレッドが 1 つしかないため、実行しようとすると 2 番目の SwingWorker オブジェクトがキューに入れられると想定する必要があります。

では、(1) デフォルトの SwingWorker スレッド プールで使用可能なスレッド数を確認するにはどうすればよいでしょうか? (2) スレッドがさらに必要になった場合にスレッドを追加するにはどうすればよいでしょうか?

他に知っておくべきことはありますか?この明らかなシングル スレッド スレッド プールの状況は、私の予想に反します。

ThreadPoolExecutor を設定していますが、これは間違っているようです...

4

3 に答える 3

2

少し遅れているかもしれませんが、新しい Java バージョンにはバグがあり ます。

于 2010-06-24T05:42:24.653 に答える
1

デフォルトの SwingWorker スレッド プールには、実際には 10 個のスレッドがあります (プライベート変数 SwingWorker.MAX_WORKER_THREADS で定義されています)。タスクの開始が 1 つしか表示されない場合は、JConsole または他の同様のツールを使用して、他のスレッドの状態を確認します。

デフォルトの SwingWorker スレッド プールをいじる簡単な方法はありません (プライベートであり、どのパブリック メソッドによっても公開されません)。SwingWorkers を独自のスレッド プールに追加することは、デフォルトのプールが機能しない場合に処理する方法として期待されます。

于 2010-05-03T17:47:23.497 に答える
0

JDK 6 では、ワーカー スレッドのデフォルト数は 10 です。

通常、ThreadPoolExecutor を作成する必要はありません。swing ワーカーが使用するデフォルトのスレッド プールで十分です。ThreadPoolExecutor の作成は危険な場合があります。静的メソッドの中には、単一のスレッドでプールを作成するだけのものもあるためです。

これらのスレッドにログが存在しない場合は追加し、ログを調べます。2 番目のバックグラウンド タスクが停止しているのは、他の同期の問題である可能性があります。

于 2010-05-03T17:58:48.227 に答える