Мой вопрос сильно связан с этим здесь. Как было опубликовано там, я хотел бы, чтобы основной поток подождал, пока рабочая очередь не будет пустой, и все задачи будут завершены. Однако проблема в моей ситуации заключается в том, что каждая задача может рекурсивно вызывать новые задачи для обработки. Это затрудняет сбор всех этих задач фьючерсами.
Наше текущее решение использует цикл "занято-ожидание" для ожидания завершения:
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 - это значение, которое увеличивается по мере создания каждой новой задачи. Это работает, но я думаю, что это не очень приятно из-за оживленного ожидания. Мне было интересно, есть ли хороший способ заставить основной поток ждать синхронно, пока явно не проснется.