12

ExecutorService#shutdownメソッドの javadoc について混乱しています。これらは矛盾した発言ではありませんか?

以前に送信されたタスクが実行される順序どおりのシャットダウンを開始しますが、新しいタスクは受け入れられません。このメソッドは、以前に送信されたタスクの実行が完了するまで待機しません。そのために awaitTermination を使用します。

以前にサブミットされたタスクを正常にシャットダウンできる場合、それらの実行が完了するのを待ちきれませんか?

4

2 に答える 2

13

これは、メソッドを呼び出したスレッドでメソッドがすぐに戻ることを意味しますが、まだ実行されていないタスクは他のスレッドで実行されている可能性があります。

以前にサブミットされたタスクが完了するまでプログラムを待機させたい場合は、 を呼び出しawaitTerminationた後にを呼び出す必要がありますshutdown

于 2013-04-18T11:32:22.613 に答える
6

これは、タスクが完了するまで実行されることを意味しますが、このメソッドはそれが起こるのを待たずにすぐに戻ります。

したがって、タスクを強制終了せずにエグゼキュータを完全にシャットダウンするには、次のようにします。

executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);

あるいは、executor をできるだけ早く停止したい場合は、 を使用しますshutdownNow()

于 2013-04-18T11:32:40.050 に答える