Я использую ExecutorService для выполнения задачи. Эта задача может рекурсивно создавать другие задачи, которые передаются в один и тот же ExecutorService, и эти дочерние задачи тоже могут это сделать.
У меня теперь есть проблема, что я хочу подождать, пока все задачи не будут выполнены (то есть все задачи закончены, и они не отправят новые), прежде чем продолжить.
Я не могу вызвать ExecutorService.shutdown() в основном потоке, потому что это предотвращает принятие новых задач с помощью ExecutorService.
И Вызов ExecutorService.awaitTermination() кажется, ничего не делает, если shutdown не был вызван.
Таким образом, я немного застрял здесь. Это не может быть так трудно для ExecutorService видеть, что все рабочие бездействуют, не так ли? Единственное неэффективное решение, которое я мог бы придумать, - это прямое использование ThreadPoolExecutor и запрос его getPoolSize() каждый раз в то время. Неужели нет лучшего способа сделать это?