gpt4 book ai didi

Java 执行器通过内部执行器超时取消作业

转载 作者:行者123 更新时间:2023-11-30 10:46:10 25 4
gpt4 key购买 nike

我有一个很大的线程池

ThreadPoolExecutor pool = new ThreadPoolExecutor(cores, 50, 30L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(3000));

我想在那里提交任务。但我根本不想调用 future.get() ,我想提交并忘记。

但是,我希望我的任务在某个时间段内被取消。所以我做了以下事情:

public void run(){

FutureTask<WorkerWrapper> task = new FutureTask<>(()->worker.process(tmpArg));
executor.execute(task);
res=task.get(2, TimeUnit.MINUTES);
executor.shutdown();

}

也就是说,我在executor里面调用了executor。安全稳定吗?或者我可以通过其他方式超时取消我的任务吗?

最佳答案

据我所知,实现这一目标的唯一真正方法是拥有第二个 ScheduledExecutor .您仍然需要 Future 的句柄,但只需将其传递给预定的执行程序以进行取消。

Future<WorkedWrapper> task = executor.execute(() -> worker.process(tmpArg));
scheduledExecutor.schedule(() -> task.cancel(true), 2, TimeUnit.MINUTES);

使用 CompleteableFuture 可能有更流畅的处理方式,但我不是 100% 确定。

关于Java 执行器通过内部执行器超时取消作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36699355/

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