Java ExecutorService の適切なシャットダウンの確保
Java の Executor は、非同期タスクを管理する便利な方法を提供します。ただし、エグゼキュータをシャットダウンすると、特に長時間実行されているタスクや応答しないタスクを処理する場合に問題が発生する可能性があります。
問題:
コード スニペットを検討してください:
<code class="java">ExecutorService exec = Executors.newSingleThreadExecutor(); // ... create and submit tasks exec.shutdownNow();</code>
すべてのタスクが完了した後、exec.isTerminated() は false のままになり、一部のタスクが適切に終了していない可能性があることを示します。
解決策:
Oracle が推奨するアプローチは shutdownAndAwaitTermination メソッドです:
<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) { pool.shutdown(); try { // Wait for existing tasks to terminate (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { pool.shutdownNow(); // Wait for cancelled tasks to respond (up to 60 seconds) if (!pool.awaitTermination(60, TimeUnit.SECONDS)) { System.err.println("Pool did not terminate"); } } } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } }</code>
シャットダウン メソッドの概要:
適切なシャットダウン メソッドを利用することで、ExecutorService が適切に終了し、リソースが解放され、クリーンなシャットダウン。
以上がJava ExecutorServiceExecutor を適切にシャットダウンするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。