「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java ExecutorService Executor を適切にシャットダウンするにはどうすればよいですか?

Java ExecutorService Executor を適切にシャットダウンするにはどうすればよいですか?

2024 年 11 月 10 日に公開
ブラウズ:547

How to Properly Shut Down Java ExecutorService Executors?

Java ExecutorService の正常なシャットダウン

Executor は、Java アプリケーションでタスクを同時に管理および実行するための便利な方法です。ただし、不適切にシャットダウンすると、予期しない動作やパフォーマンスの問題が発生する可能性があります。このガイドでは、ExecutorService を適切にシャットダウンし、すべてのタスクが確実に終了またはキャンセルされるようにする方法について詳しく説明します。

ExecutorService のシャットダウンについて

ExecutorService には 2 つの主要なシャットダウン方法があります。 :

  • shutdown(): 既存のタスクの完了を許可しながら、新しいタスクの送信を防ぎます。
  • shutdownNow(): 試行します実行中および待機中のタスクをすべて停止し、未処理のタスクのリストを返します。

シャットダウンによってすべてのタスクが終了することが保証されないことに注意することが重要です。割り込みに応答できないタスクや、長時間実行されるタスクは、アクティブなままになる可能性があります。

推奨されるシャットダウン手順

Oracle のドキュメントでは、正常にシャットダウンするための次のアプローチが推奨されています。

void shutdownAndAwaitTermination(ExecutorService pool) {
    pool.shutdown();
    try {
        // Wait for existing tasks to terminate
        if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
            pool.shutdownNow();
            // Wait for tasks to respond to cancellation
            if (!pool.awaitTermination(60, TimeUnit.SECONDS))
                System.err.println("Pool did not terminate");
        }
    } catch (InterruptedException ie) {
        pool.shutdownNow();
        Thread.currentThread().interrupt();
    }
}

このアプローチでは、新しい送信を防止しながら、既存のタスクの完了を確実に許可します。シャットダウン プロセスに予想より時間がかかる場合は、

if (!pool.awaitTermination(60, TimeUnit.SECONDS))

while (!pool.awaitTermination(60, TimeUnit.SECONDS))

タスクの完了を待ち続けます。

シャットダウン方法の概要

  • shutdown(): 新しいタスクの受け入れを停止しますが、既存のタスクの完了は許可します。
  • shutdownNow(): すべての実行中および待機中のタスクを停止し、未処理のタスクを返します。 .
  • awaitTermination(long timeout, TimeUnit単位): すべてのタスクが完了するか、タイムアウトが発生するか、現在のスレッドが中断されるまでブロックします。
リリースステートメント この記事は次の場所に転載されています: 1729725790 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3