ホームページ  >  記事  >  Java  >  Java ExecutorService をシャットダウンするときにタスクを確実に終了するにはどうすればよいですか?

Java ExecutorService をシャットダウンするときにタスクを確実に終了するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-24 07:39:02822ブラウズ

How to Ensure the Termination of Tasks When Shutting Down a Java ExecutorService?

ExecutorService シャットダウン終了戦略

質問:

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>

関連メソッドのシャットダウン:

  • shutdown: 正常なシャットダウンを開始し、以前に送信されたタスクを実行し、新しいタスクを拒否します。
  • shutdownNow: すべての停止を試みます実行中のタスクを実行し、実行を待っているタスクのリストを返します。
  • awaitTermination: すべてのタスクが完了するか、タイムアウトまたは中断が発生するまでブロックします。

強化された終了待機:

プールのシャットダウンにさらに時間がかかる場合は、次のように変更できます:

<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>

:

<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS))</code>

これは続行されます終了が完了するまで無期限に待機します。

以上がJava ExecutorService をシャットダウンするときにタスクを確実に終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。