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