Исполнители: Как синхронно дождаться завершения всех задач, если задачи создаются рекурсивно?

Мой вопрос тесно связан содин здесь, Как было там написано, я бы хотел, чтобы основной поток дождался, пока рабочая очередь не опустеет и все задачи не будут выполнены. Однако проблема в моей ситуации заключается в том, что каждая задача может рекурсивно приводить к отправке новых задач на обработку. Это немного неловко собирать будущее всех этих задач.

Наше текущее решение использует цикл ожидания ожидания для завершения:

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

Ответы на вопрос(9)

Ваш ответ на вопрос