Я положил кучу работоспособных объектов в ExecutorService:программа не завершается сразу, когда все задачи ExecutorService сделаны
// simplified content of main method
ExecutorService threadPool = Executors.newCachedThreadPool();
for(int i = 0; i < workerCount; i++) {
threadPool.execute(new Worker());
}
Я ожидаю, что моя программа/процесс немедленно прекратить после того, как все рабочие сделали. Но согласно моему журналу, это займет еще 20-30 секунд, пока это не произойдет. Работники не выделяют никаких ресурсов, фактически они ничего не делают на данный момент.
Не поймите меня неправильно, это не очень важная проблема для меня, я просто пытаюсь понять, что происходит, и мне интересно, нормальное поведение.
Понял, спасибо за ваш подробный ответ на мой вопрос. – alapeno
Хотя это будет работать, правильный ответ заключается в том, что вы _must_ завершите работу 'ExecutorService' @alapeno. – Gray
@Gray: Нет, посмотрите в Javadoc, который я цитировал в своем ответе, - эти потоки автоматически выключаются, если они простаивают в течение 60 секунд. –