ホームページ > Java > &#&チュートリアル > Timers と ExecutorService を使用して Java でタスクのタイムアウト メカニズムを実装するにはどうすればよいですか?

Timers と ExecutorService を使用して Java でタスクのタイムアウト メカニズムを実装するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-25 12:39:09
オリジナル
721 人が閲覧しました

How Can I Implement a Timeout Mechanism for Tasks in Java using Timers and ExecutorService?

Java でタイマーを設定する

この質問は当初、データベース接続を試行し、接続に問題がある場合に例外をスローするタイマーの設定に焦点を当てていました。起きます。明確化された質問はさらに、指定された期間にわたってタスクを実行するようにタイマーをリクエストし、タスクがその時間を超えると例外をスローします。

タイマーの設定

タイマーを設定するには、java.util.Timer オブジェクトを作成します。

Timer timer = new Timer();
ログイン後にコピー

タスクを 1 回実行するには、スケジュールを設定します。 using Timer.schedule():

timer.schedule(new TimerTask() {
    @Override
    public void run() {
        // Database code here
    }
}, 2*60*1000); // 2 minutes in milliseconds
ログイン後にコピー

指定した間隔でタスクを繰り返すには、Timer.scheduleAtFixedRate():

timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        // Database code here
    }
}, 2*60*1000, 2*60*1000);
ログイン後にコピー

タイムアウト メカニズム

タスクのタイムアウトを設定するには、 ExecutorService:

ExecutorService service = Executors.newSingleThreadExecutor();

try {
    Runnable r = new Runnable() {
        @Override
        public void run() {
            // Database task
        }
    };

    Future<?> f = service.submit(r);

    f.get(2, TimeUnit.MINUTES); // attempt the task for 2 minutes
}
catch (InterruptedException e) {
    // Thread interrupted during sleep, wait, or join
}
catch (TimeoutException e) {
    // Took too long!
}
catch (ExecutionException e) {
    // Exception within the Runnable task
}
finally {
    service.shutdown();
}
ログイン後にコピー

タスクが 2 分以内に完了すると、このコードは正常に実行されます。それ以外の場合は、TimeoutException がスローされ、データベースまたはネットワーク接続で例外が発生するまでスレッドは実行を続けます。

以上がTimers と ExecutorService を使用して Java でタスクのタイムアウト メカニズムを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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