Хорошо, поэтому я знаю, что первый ответ/комментарий здесь будет "использовать один ExecutorService
и использовать invokeAll
". Тем не менее, есть веская причина (с которой я не буду скучать), поскольку мы сохраняем отдельные пулы потоков.
Итак, у меня есть список пулов потоков (ExecutorServices
), и мне нужно сделать другой Callable
в каждом пуле потоков с помощью submit
(там нет проблем). Теперь у меня есть коллекция экземпляров Future
, каждая из которых создана на отдельном ExecutorService
, и я хочу дождаться, когда все они будут завершены ( и сможет предоставить тайм-аут, в который отменены любые неработающие).
Есть ли существующий класс, который сделает это (завершите список экземпляров Future
и разрешите ждать, пока все не будут выполнены)? Если нет, предложения по эффективному механизму будут оценены.
Думал о вызове get
с тайм-аутом для каждого, но ему нужно сделать расчет общего времени, прошедшего для каждого вызова.
Я видел этот пост Подождите, пока не будет выполнено какое-либо будущее, но это расширяет Future
вместо того, чтобы обернуть список из них.