У меня есть набор задач на нескольких уровнях, которые мне нужно выполнять параллельно на потоках, взятых из пула потоков.
Я использую защелку обратного отсчета, чтобы рассчитать общее выполнение уровня.
Проблема: есть несколько задач, которые выполняются дольше, чем их индивидуальное время, только из-за других задач того же уровня, которые имеют больше времени выполнения. Я хочу избежать этого.
Ниже приведен код, который я использую.
private final ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setNameFormat(
"TaskExecutor-thread-%d").build());
....
for (int i = 0; i < levels.size(); i++) {
Set<AbstractTask> taskSet = levels.get(i);
CountDownLatch latch = new CountDownLatch(taskSet.size());
int maxAwaitTime = TaskExecutorHelper.getMaxAwaitTime(taskSet); //this returns max of all
// execution time set for
//individual tasks
for (AbstractTask t : taskSet) {
executor.submit(() -> { t.doExecute(input); });
}
latch.await(maxAwaitTime, TimeUnit.MILLISECONDS);
}
Любая помощь будет оценена!