2

私はJavaエグゼキュータが初めてです。

Java の ExecutorService を使用して、複数のスレッドを起動してデータを処理しています。

Executor executor = Executors.newFixedThreadPool(poolSize);

for(int i=0; i< 5;i++) executor.execute(new MyRunnable(i));

スレッドがデータを見つけられなくなると、正常に終了します。

私の質問は、すべてのスレッドが終了したときに Executor に何が起こるかです。それはまだマスタースレッドを実行していますか? または、それ自体が終了し、アプリケーション全体が正常に終了しますか?

executor スレッドがまだ実行されている場合、すべての子スレッドが完了したら終了させるにはどうすればよいですか (poolSize スレッド数)。

4

4 に答える 4

3

1) 固定スレッド プール エグゼキューター内のスレッドは、一度開始すると決して終了しません。

2) スレッド プール エグゼキューターにマスター スレッドがありません

于 2013-03-02T07:37:41.037 に答える
2

Executor横たわっているスレッドプールの下で実行し続けます。新しいタスクを実行または送信できます。アクティブに実行中のすべてのタスクを停止しようとするExecutor サービス呼び出しをシャットダウンしExecutorService.html#shutdown() 、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返すことをお勧めします。

ExecutorService.html#shutdownNow()アクティブに実行中のすべてのタスクを停止し、待機中のタスクの処理を停止し、実行を待機していたタスクのリストを返す which を使用することもできます。すぐにシャットダウンする必要がある場合に便利です。

于 2013-03-02T07:29:12.520 に答える
2

次のように考えることができます。

shutdown()新しいタスクを受け入れることができないことをエグゼキューター サービスに伝えるだけですが、既に送信されたタスクは引き続き実行されます。

shutdownNow()同じことを行い、関連するスレッドを中断して、既に送信されたタスクをキャンセルしようとします。タスクが中断を無視するshutdownNowと、シャットダウンとまったく同じように動作することに注意してください。

于 2013-03-02T07:33:46.617 に答える
1

インターフェース ExecuterService から正常にシャットダウンするには shutdown メソッドを使用します。その後、いつでもサブミットを使用して新しい作業を行うことができます。その他のユーティリティメソッドはこちら

于 2013-03-02T07:33:03.453 に答える