Java ExecutorService の正常なシャットダウン
Executor は、Java アプリケーションでタスクを同時に管理および実行するための便利な方法です。ただし、不適切にシャットダウンすると、予期しない動作やパフォーマンスの問題が発生する可能性があります。このガイドでは、ExecutorService を適切にシャットダウンし、すべてのタスクが確実に終了またはキャンセルされるようにする方法について詳しく説明します。
ExecutorService のシャットダウンについて
ExecutorService には 2 つの主要なシャットダウン方法があります。 :
シャットダウンによってすべてのタスクが終了することが保証されないことに注意することが重要です。割り込みに応答できなかったタスクや、実行時間が長いタスクは、アクティブなままになる可能性があります。
推奨シャットダウン手順
Oracle のドキュメントでは、正常にシャットダウンするための次のアプローチを推奨しています。
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for tasks to respond to cancellation if (!pool.awaitTermination(60, TimeUnit.SECONDS)) System.err.println("Pool did not terminate"); } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
このアプローチでは、新しい送信を防ぎながら、既存のタスクの完了が許可されます。シャットダウン プロセスに予想より時間がかかる場合は、
<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
を
<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>
に置き換えて、タスクの完了を待ち続けることができます。
シャットダウンの概要メソッド
以上がJava ExecutorService Executor を適切にシャットダウンするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。