ホームページ > Java > &#&チュートリアル > ExecutorService は TimerTask よりもスレッド タイムアウト処理をどのように改善できるでしょうか?

ExecutorService は TimerTask よりもスレッド タイムアウト処理をどのように改善できるでしょうか?

Linda Hamilton
リリース: 2024-12-20 05:01:12
オリジナル
847 人が閲覧しました

How Can ExecutorService Improve Thread Timeout Handling Over TimerTask?

スレッド タイムアウト: 代替アプローチ

TimerTask はスレッド内のタイムアウトを処理できますが、最適な解決策ではありません。 ExecutorService はスレッド管理とタイムアウトに対する包括的なアプローチを提供するため、代わりに ExecutorService の使用を検討してください。

ExecutorService を使用すると、呼び出し可能なタスクを作成し、実行のために送信できます。送信されたタスクは、Future オブジェクトを通じて監視できます。 Future#get() メソッドでタイムアウトを指定すると、例外がスローされるまでにスレッドを実行する時間を制御できます。

実装例を次に示します。

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 Test {
    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 {
        // Replace this with your long-running task.
        Thread.sleep(4000);
        return "Ready!";
    }
}
ログイン後にコピー

この例では、このシナリオでは、タスクは完了するまでに 4 秒間実行されます。タイムアウトを 5 秒に増やすと、タスクは終了せずに終了します。タイムアウトが短い期間に設定されている場合、TimeoutException がスローされ、タスクはキャンセルされます。

長時間実行タスク内のスレッドの中断を確認するには、while (!Thread.interrupted() ) { ... } ループ。そうすることで、必要に応じてタスクを正常に終了できます。

以上がExecutorService は TimerTask よりもスレッド タイムアウト処理をどのように改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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