Я передаю набор задач по потоку, вот упрощенная демонстрация:
ExecutorService executorService = Executors.newCachedThreadPool((r) -> {
Thread thread = new Thread();
thread.setDaemon(true); // even I removed this, it's still not working;
return thread;
});
IntStream.range(0, TASK_COUNT).forEach(i -> {
executorService.submit(() -> {
out.println(i);
return null;
});
});
После того, как все задачи отправлены , я пытаюсь дождаться завершения всех из них, используя:
executorService.shutdown();
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
Но вывод - нет, ничего не распечатано.
Что-то не так? Любая помощь будет оценена.
Один странный вывод заключается в том, что при использовании значения по умолчанию DefaultThreadFactory это работает.
ExecutorService executorService = Executors.newCachedThreadPool();
F.Y.I Потоки демонов - это причина, которую я уже проверил. Для отладки я поставил их специально.