ホームページ  >  記事  >  Java  >  Java ExecutorService Executor を適切にシャットダウンするにはどうすればよいですか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 07:27:30691ブラウズ

How to Properly Shut Down Java ExecutorService Executors?

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

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

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

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

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

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

推奨シャットダウン手順

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

<code class="java">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();
    }
}</code>

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

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

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

に置き換えて、タスクの完了を待ち続けることができます。

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

  • shutdown(): 新しいタスクの受け入れを停止しますが、既存のタスクの完了は許可します。
  • shutdownNow():実行中および待機中のタスクをすべて停止し、未処理のタスクを返します。
  • awaitTermination(long timeout, TimeUnit単位): すべてのタスクが完了するか、タイムアウトが発生するか、現在のスレッドが中断されるまでブロックします。

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

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