タイムアウトによる ExecutorService のタスクの中断
タイムアウト後のタスクの中断を処理するカスタム ExecutorService の実装は、困難な場合があります。ただし、Java 同時実行フレームワークは、ScheduledExecutorService を使用した便利なソリューションを提供します。
タスク タイムアウト用の ScheduledExecutorService
ScheduledExecutorService を使用すると、指定した遅延後または定期的に実行するタスクをスケジュールできます。間隔。この機能を利用すると、送信されたタスクを監視し、事前定義されたタイムアウトを超えた場合に中断するカスタム ExecutorService を作成できます。
TimeoutThreadPoolExecutor 実装
このようなタスクを作成するための 1 つのアプローチExecutorService は TimeoutThreadPoolExecutor クラスであり、標準のスレッドプールエグゼキュータ。 ScheduledExecutorService (timeoutExecutor) と並行マップ (runningTasks) を統合して、実行中のタスクを追跡し、その中断をスケジュールします。
TimeoutThreadPoolExecutor の機能
使用法
このカスタム 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 サイトの他の関連記事を参照してください。