Итак, у меня есть ExecutorService, успешно блокирующая и работающая линейно прямо сейчас.Моя проблема в том, что я пытаюсь добавить обновление статуса и не могу понять, как заставить фьючерсы рассчитывать один элемент за раз.Похоже, что к тому моменту, когда первый элемент в моем Future <> будет готов, он станет последним.Я надеюсь найти место, где я смогу узнать, сколько заданий осталось у моего executorService / всего, чтобы я мог рассчитать простой процентный показатель.Обратите внимание, что я собираюсь утилизировать моего исполнителя и не хочу его закрывать.
ExecutorService updateService = Executors.newSingleThreadExecutor();
Callable<String> callHour = () -> {
//doStuff, unaware of total number of hourCalls
return "done";
};
private void startMe(int hours){
List<Future<String>> futureHours;
List<Callable<String>> hourCalls = new ArrayList<>(hours);
for (int hour = 0; hour < hours; ++hour) {
hourCalls.add(callHour); //queue list (not running yet)
}
try {
//executes queue and blocks thread
futureHours = updateService.invokeAll(hourCalls);
futureHours.get(0).get();//performs blocking
} catch (Exception e) {
e.printStackTrace();
}
}
}