ExecutorService#shutdownメソッドの javadoc について混乱しています。これらは矛盾した発言ではありませんか?
以前に送信されたタスクが実行される順序どおりのシャットダウンを開始しますが、新しいタスクは受け入れられません。このメソッドは、以前に送信されたタスクの実行が完了するまで待機しません。そのために awaitTermination を使用します。
以前にサブミットされたタスクを正常にシャットダウンできる場合、それらの実行が完了するのを待ちきれませんか?
ExecutorService#shutdownメソッドの javadoc について混乱しています。これらは矛盾した発言ではありませんか?
以前に送信されたタスクが実行される順序どおりのシャットダウンを開始しますが、新しいタスクは受け入れられません。このメソッドは、以前に送信されたタスクの実行が完了するまで待機しません。そのために awaitTermination を使用します。
以前にサブミットされたタスクを正常にシャットダウンできる場合、それらの実行が完了するのを待ちきれませんか?
これは、メソッドを呼び出したスレッドでメソッドがすぐに戻ることを意味しますが、まだ実行されていないタスクは他のスレッドで実行されている可能性があります。
以前にサブミットされたタスクが完了するまでプログラムを待機させたい場合は、 を呼び出しawaitTermination
た後にを呼び出す必要がありますshutdown
。
これは、タスクが完了するまで実行されることを意味しますが、このメソッドはそれが起こるのを待たずにすぐに戻ります。
したがって、タスクを強制終了せずにエグゼキュータを完全にシャットダウンするには、次のようにします。
executor.shutdown();
executor.awaitTermination(long timeout, TimeUnit unit);
あるいは、executor をできるだけ早く停止したい場合は、 を使用しますshutdownNow()
。