Исполнители: Как синхронно дождаться завершения всех задач, если задачи создаются рекурсивно?
Мой вопрос тесно связан содин здесь, Как было там написано, я бы хотел, чтобы основной поток дождался, пока рабочая очередь не опустеет и все задачи не будут выполнены. Однако проблема в моей ситуации заключается в том, что каждая задача может рекурсивно приводить к отправке новых задач на обработку. Это немного неловко собирать будущее всех этих задач.
Наше текущее решение использует цикл ожидания ожидания для завершения:
do { //Wait until we are done the processing
try {
Thread.sleep(200);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
} while (!executor.getQueue().isEmpty()
|| numTasks.longValue() > executor.getCompletedTaskCount());
numTasks - это значение, которое увеличивается при создании каждой новой задачи. Это работает, но я думаю, что это не очень приятно из-за напряженного ожидания. Мне было интересно, есть ли хороший способ заставить основной поток синхронно ждать, пока его явно не разбудят.