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

Barbara Streisand
リリース: 2024-10-24 07:39:02
オリジナル
821 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!