ホームページ > Java > &#&チュートリアル > ExecutorService を使用して Java でスレッドのタイムアウトを設定する方法

ExecutorService を使用して Java でスレッドのタイムアウトを設定する方法

Barbara Streisand
リリース: 2024-12-16 12:55:17
オリジナル
607 人が閲覧しました

How to Set a Timeout for a Thread in Java Using ExecutorService?

スレッドのタイムアウトを設定する方法

最初の問い合わせで指摘されたように、スレッドの実行を制限する方法について懸念があります。時間。目標は、スレッドが無限ループに入り、親スレッドが無限に待機する可能性がある状況に対処することです。

ここで説明する解決策の 1 つは、スレッドの run() メソッド内で TimerTask を使用することです。ただし、より効率的なアプローチは、ExecutorService クラスを利用することです。これにより、スレッドにタイムアウトを設定するための便利なメカニズムが提供されます。

ExecutorService を使用した実装例は次のように説明できます。

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TimeoutTest {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(new Task());

        try {
            System.out.println("Started..");
            System.out.println(future.get(3, TimeUnit.SECONDS));
            System.out.println("Finished!");
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Terminated!");
        }

        executor.shutdownNow();
    }
}

class Task implements Callable<String> {
    @Override
    public String call() throws Exception {
        Thread.sleep(4000); // Simulate a long-running task that takes 4 seconds
        return "Ready!";
    }
}
ログイン後にコピー

この例では、Task クラスは長いタスクをカプセル化します。実行中のタスク。 ExecutorService.submit() メソッドは、このタスクを実行のために送信するために使用されます。 submit() によって返される Future オブジェクトは、タスクの結果を取得するメカニズムを提供します。

Future.get() メソッドは、3 秒のタイムアウト引数を指定して呼び出されます。タスクがこの時間枠内に終了すると、結果が返されます。ただし、タスクに 3 秒以上かかる場合は、TimeoutException がスローされます。 catch ブロックでは、タスクがキャンセルされ、「Terminated!」というメッセージが表示されます。

さらに、長時間実行されるタスクでは、タスクが無期限に実行されるのを防ぐために、中断を処理するためのチェックを組み込む必要があることに注意することが重要です。このチェックは Thread.interrupted().

を使用して実装できます。

以上がExecutorService を使用して Java でスレッドのタイムアウトを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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