Можно ли каким-либо образом использовать ExecutorService
в Java для планирования рекурсивных задач?Как планировать задачи рекурсивно с помощью ExecutorService
Пример кода: (Примечание: попытаться/поймать около Thread.sleep опущено для повышения читаемости)
final ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 8; i++) {
executor.execute(() -> { // TASK 1
Thread.sleep(100); // simulate some work
executor.execute(() -> { // TASK2
Thread.sleep(500); // simulate some longer work
});
});
}
# terminate when all tasks proceeded
executor.shutdown();
executor.awaitTermination(9999999, TimeUnit.DAYS);
Проблема, как представляется, порядок исполнения:
- создать исполнителя
- выполнение расписания ЗАДАЧА 1 (8x)
- shutdown
- awaitTermination
- конца первого сна, а затем запланировать выполнение задачи 2
- FAIL, потому что после завершения работы никакой задачи не может быть выполнена.
Это, я считаю, общая проблема. Однако я не могу найти подходящего решения. Список того, что я ищу:
Требование:
- способность exectute задач из уже запланированных задач
- блока как-то в конце, пока все задачи не будут выполнены
- нет активного ожидания для выполнения задач
- фиксированный макс. количество потоков используется
- возможно безблокировочного и поточно-
Не могли бы вы мне помочь? Я не хочу реализовывать свой собственный пул потоков, поскольку это должно быть уже реализовано многократно (желательно в стандартной библиотеке).
Спасибо
Спасибо, что это хорошее решение, однако, я предпочел бы избежать заставляя пользователя осуществлять свои собственные управления зависимостями. Кроме того, количество заданий и т. Д. Неизвестно (так как они могут передаваться по сети). Я скорее ищу простое решение для пользователя, то есть используя только lambdas (а не некоторые сложные классы с зависимостями). Может быть, ваше решение может быть преобразовано таким образом? – petrbel