質問:
Java をシャットダウンするときに実行中のタスクを確実に終了するにはどうすればよいですか? ExecutorService?
回答:
ExecutorService の Oracle API ドキュメントでは、次のアプローチを推奨しています:
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); // Disable new tasks try { // Wait for existing tasks if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Cancel executing tasks 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 をシャットダウンするときにタスクを確実に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。