gpt4 book ai didi

java - ExecutorService - 执行具有特定时间限制的每个任务

转载 作者:搜寻专家 更新时间:2023-11-01 00:54:10 25 4
gpt4 key购买 nike

我正在创建一个 ExecutorService 来执行一些任务,这些任务在正常情况下预计需要一分钟才能完成,但在任何情况下都不应允许运行超过两分钟 任务开始时

我的代码如下:

ExecutorService executorService = Executors.newFixedThreadPool(10);
ArrayList<Future<?>> futuresList = new ArrayList<Future<?>>();



for (String singleTask: taskList) {
futuresList.add(executorService.submit( new Runnable(){
@Override
public void run(){
try {
performTask(p1, singleTask, p3);
} catch (IOException | InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}));

}



for(Future<?> future : futures) {
future.get(120, TimeUnit.SECONDS);
}

这将阻塞直到指定超时,然后继续。我的问题如下:

1) 如果 task1 阻塞了两分钟并且 task2 也阻塞了两分钟 - 那么 task2 将“阻塞”总共4 分钟(因为 future.get(120, TimeUnit.SECONDS);task1 完成阻塞之前不会在 task2 上调用)——即使两个任务都已提交并开始执行同时

2) 如果我提交超过 10 个任务,任务 11+ 可能永远不会阻塞所需的时间,如果之前的任务在 future.get(120 , TimeUnit.SECONDS); 在第 11 个任务上调用

我的目标是让每个单独的任务最多执行两分钟,无论列表中的任务数量如何,也无论在它之前或之后有多少任务。

谢谢

最佳答案

您可以使用 System.currentTimeMillis();然后添加最长时间,例如 120_000 毫秒。当你等待时,你减去当前时间。 IE。您只需等到达到最长时间。

关于java - ExecutorService - 执行具有特定时间限制的每个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53196393/

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