gpt4 book ai didi

java - ExecutorService 对单个线程的时间限制

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:49 27 4
gpt4 key购买 nike

我有一个 ExecutorService 管理多个 Callable。 Callables 运行的任务主要是黑盒转换和数字运算。在某些情况下,正在转换的数据会发生振荡,线程将需要一个多小时才能完成。相比之下,大多数线程在一分钟内完成。

已确定来自长时间运行的线程的数据不相关。我想中断任何运行时间超过一定时间的线程。执行此操作的最佳方法是什么?

最佳答案

使用 ScheduleExecutorService 将任务安排到 taskFuture.cancel(true) 达到超时时长时间运行的任务。如果任务在此之前完成,则不会取消。

ExecutorService service = Executors.newFixedThreadPool(N);
ScheduledExecutorService canceller = Executors.newSingleThreadScheduledExecutor();

public <T> Future<T> executeTask(Callable<T> c, long timeoutMS){
final Future<T> future = service.submit(c);
canceller.schedule(new Callable<Void>(){
public Void call(){
future.cancel(true);
return null;
}
}, timeoutMS, TimeUnit.MILLI_SECONDS);
return future;
}

关于java - ExecutorService 对单个线程的时间限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4819855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com