Я пытаюсь использовать ThreadPoolExecutor/ExecutorService в своем приложении - это статический глобальный объект. Я использую: Executors.newScheduledThreadPool(corePoolSize) - но у меня проблемы с закрытием executorService.
Если я не вызову shutdown() + awaitTermination(), мое приложение не завершится, даже если все потоки будут завершены.
В моем приложении есть потоки, созданные другими потоками, поэтому я не могу поставить shutdown() в любом месте кода, не блокируя дальнейшие потоки для запуска.
Есть ли способ разрешить java shutdown() службу исполнителя, когда все потоки будут завершены.
Спасибо
-- Также этот вопрос не является дубликатом - исправление демона заставляет мое приложение завершать работу до того, как все потоки будут завершены (см. комментарий) - Какое будет исправление для этого? Спасибо
ConcurrentList
, который будет отслеживать все фьючерсы вашей задачи и пытатьсяget
их проверьте, выполнено ли это Я мог бы посоветовать вам использоватьAtomicInteger
для подсчета количества активных задач таймеров, я мог бы посоветовать вам использоватьSemaphore
илиCountDownLatch
, чтобы ваши потоки могли сигнализировать, когда они выполняются коллективно... Но ничего из этого будет полезно до тех пор, пока вы не знаете, как определить, что вы закончили... (Таймеры больше не будут срабатывать? Все таймеры сделаны?) - person GPI   schedule 16.03.2015ScheduledThreadPool
, как указывает ваш вопрос. Если это работает для вас, тогда хорошо (и это означает, что ваше определение выполнено: если ни одна задача не была отправлена в течение 1 минуты, что является тайм-аутом потокаCachedThreadPool
). Однако будьте осторожны с corePoolSize, потому что, если он не равен нулю, у вас все равно будут живые потоки. Это все детали реализации, которые могут вам подойти, но вы должны знать, как это соотносится с вашими бизнес-требованиями. - person GPI   schedule 17.03.2015