Java ExecutorService のシャットダウン中にタスクを確実に終了する方法

Mary-Kate Olsen
リリース: 2024-10-24 07:49:29
オリジナル
1053 人が閲覧しました

How to Ensure Task Termination During Java ExecutorService Shutdown

Java ExecutorService のシャットダウン: タスク終了の確認

Java ExecutorService を扱う場合、重要な点はすべてのタスクが適切に終了するようにシャットダウン プロセスを処理することです。タスクの実行中にタイムアウトやその他の中断が発生すると、これは困難になります。

カスタム アプローチ

提供されたコードは、CallableTask オブジェクトを実行する ExecutorService が困難に直面するシナリオを示しています。すべてのタスクが完了したらシャットダウンします。この問題は、タイムアウトしきい値を超えたタスク スレッドがアクティブなままになり、実行の終了が妨げられる可能性があることが原因です。

推奨される解決策

この問題に対処するには、Oracle API ExecutorService のドキュメントでは、次のアプローチを推奨しています。

<code class="java">void shutdownAndAwaitTermination(ExecutorService pool) {
   pool.shutdown(); 
   try {
     if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
       pool.shutdownNow(); 
       if (!pool.awaitTermination(60, TimeUnit.SECONDS))
           System.err.println("Pool did not terminate");
     }
   } catch (InterruptedException ie) {
     pool.shutdownNow(); 
     Thread.currentThread().interrupt();
   }
}</code>
ログイン後にコピー

このメソッドは、順序だったシャットダウン プロセスを保証します。

  • shutdown(): 新しいタスクの送信を無効にします。
  • awaitTermination(): 既存のタスクが完了するまでタイムアウト期間を待ちます。
  • shutdownNow(): awaitTermination() が失敗した場合、実行中のタスクを中断し、強制的に終了します。

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

  • shutdown(): 送信されたタスクは実行されますが、新しいタスクは拒否される正常なシャットダウンを開始します。
  • shutdownNow():すべてのアクティブなタスクを停止し、保留中のタスクを停止し、未完了のタスクのリストを返そうとします。
  • awaitTermination(): (完了または中断によって) すべてのタスクが完了するまでブロックします。

追加のヒント

頑固なタスクのシャットダウン タイムアウトを延長するには、awaitTermination():

<code class="java">if (!pool.awaitTermination(60, TimeUnit.SECONDS)) </code>
ログイン後にコピー

を次のように変更します:

<code class="java">while (!pool.awaitTermination(60, TimeUnit.SECONDS)) </code>
ログイン後にコピー

これらの手法を実装すると、ExecutorService のシャットダウン プロセスの信頼性が向上し、タスクの適切な終了とシステムのクリーンアップが保証されます。

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

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート