このコンテキストでは、事前定義されたタイムアウトを超えるタスクを中断できる ExecutorService 実装に興味があります。
そのような実装の 1 つ実装は TimeoutThreadPoolExecutor で、送信されたタスクのタイムアウト期間を指定するメカニズムを提供します。
<br>import java.util.List ;<br>インポートjava.util.concurrent.*;</p> <p>public class TimeoutThreadPoolExecutor extends ThreadPoolExecutor {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">private final long timeout; private final TimeUnit timeoutUnit; // ... (rest of the implementation)
}
このエグゼキューター サービスを利用するには、次のように指定してインスタンスを作成するだけです。希望のタイムアウト:
TimeoutThreadPoolExecutor executor = new TimeoutThreadPoolExecutor(..., timeout, TimeUnit.MILLISECONDS);
その後、通常どおりタスクを実行者に送信します。指定されたタイムアウトを超えるタスクは中断されます。
別の方法として、ScheduledExecutorService を使用することもできます。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); Future<?> handler = executor.submit(new Callable() { /* ... */ }); executor.schedule(() -> handler.cancel(true), 10000, TimeUnit.MILLISECONDS);
この戦略により、タスクは確実に中断されます。 10秒。
以上がタイムアウト後にタスクを中断する ExecutorService を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。