ホームページ > Java > &#&チュートリアル > Java ExecutorService で時間指定タスクの中断を実装するにはどうすればよいですか?

Java ExecutorService で時間指定タスクの中断を実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-28 01:39:13
オリジナル
694 人が閲覧しました

How Can I Implement Timed Task Interruption in a Java ExecutorService?

タイムアウトによる ExecutorService のタスクの中断

タイムアウト後のタスクの中断を処理するカスタム ExecutorService の実装は、困難な場合があります。ただし、Java 同時実行フレームワークは、ScheduledExecutorService を使用した便利なソリューションを提供します。

タスク タイムアウト用の ScheduledExecutorService

ScheduledExecutorService を使用すると、指定した遅延後または定期的に実行するタスクをスケジュールできます。間隔。この機能を利用すると、送信されたタスクを監視し、事前定義されたタイムアウトを超えた場合に中断するカスタム ExecutorService を作成できます。

TimeoutThreadPoolExecutor 実装

このようなタスクを作成するための 1 つのアプローチExecutorService は TimeoutThreadPoolExecutor クラスであり、標準のスレッドプールエグゼキュータ。 ScheduledExecutorService (timeoutExecutor) と並行マップ (runningTasks) を統合して、実行中のタスクを追跡し、その中断をスケジュールします。

TimeoutThreadPoolExecutor の機能

  • beforeExecute: タスクが送信されると、 timeoutExecutor を使用して中断がスケジュールされています。 ScheduledFuture が返されて runningTasks に保存され、タスクがスケジュールされた中断タスクにマッピングされます。
  • afterExecute: タスクが完了すると、対応する ScheduledFuture が runningTasks から削除されてキャンセルされ、タスクが中断されます。まだそうなっていない場合completed.
  • shutdown: ThreadPoolExecutor と ScheduledExecutorService の両方を正常にシャットダウンします。
  • shutdownNow: ThreadPoolExecutor と ScheduledExecutorService の両方を強制的にシャットダウンします。 ScheduledExecutorService.

使用法

このカスタム ExecutorService を使用するには、必要なパラメーターを使用して TimeoutThreadPoolExecutor をインスタンス化し、タスクの送信を開始します。タスクは、完了していない場合、指定されたタイムアウト後に中断されます。

スケジュールを使用した代替方法

ExecutorService で長時間実行されているタスクを中断する別の方法は、次のとおりです。 ScheduledExecutorService によって提供されるスケジュール メソッドを使用します。 2 つのタスクを送信できます。1 つは実際のタスクを実行するタスク、もう 1 つは指定されたタイムアウト後にタスクをキャンセルするタスクです。

コード例

ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); 
Future handler = executor.submit(new Callable(){ ... });
executor.schedule(new Runnable(){
    public void run(){
        handler.cancel();
    }      
}, 10000, TimeUnit.MILLISECONDS);
ログイン後にコピー

このメソッドでは、次のことが可能です。 10 秒のタイムアウトでタスクを実行します。その後、タスクはキャンセルされて中断されます。

以上がJava ExecutorService で時間指定タスクの中断を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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