Завершение вызова ScheduledExecutorService для бесконечного планирования
Я использую ScheduledExecutorService, который будет запускаться каждую минуту бесконечно
Может кто-нибудь сказать мне, когда вызывать завершение работы на ScheduledExecutorService
Я уже посмотрел в Guava MoreExecutors. Это не работает, так как мне нужно заблокировать основной поток, чтобы другие потоки работали непрерывно
Случай использования
У меня есть задача, которая постоянно контролирует систему для проверки задержки / сбоев.
Мне нужно периодически запускать эту задачу и настраивать сигналы тревоги Cloudwatch на ее основе. В идеале, я хотел бы, чтобы задача продолжала выполняться даже при пике задержки, потому что сигнал тревоги был бы вызван
Итак, я использую ScheduledExecutorService для периодического планирования задач.
Я хочу знать идеальное место, где я бы вызвал shutdown() в службе executor
1 ответ
В настоящее время заводские методы в Executors
вернуть экземпляр ScheduledThreadPoolExecutor
1 По умолчанию ScheduledThreadPoolExecutor
не будет продолжать выполнять периодические задачи после его выключения. Вы можете настроить это через setContinueExistingPeriodicTasksAfterShutdownPolicy
,
Устанавливает политику относительно продолжения выполнения существующих периодических задач, даже если этот исполнитель был
shutdown
, В этом случае казни будут продолжаться доshutdownNow
или политика установлена вfalse
когда уже отключение. Это значение по умолчаниюfalse
,
Поскольку это действительно детали реализации, что реализация ScheduledExecutorService
фабричные методы Executors
возвращение, вероятно, лучше создать ScheduledThreadPoolExecutor
непосредственно.
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
executor.scheduleAtFixedRate(() -> System.out.println("Hello, World!"), 0L, 1L, TimeUnit.SECONDS);
executor.shutdown();
Обратите внимание, это в настоящее время настраивает ScheduledThreadPoolExecutor
использовать нити демона. Даже если shutdown
был вызван, если периодические задачи не отменены, они будут поддерживать JVM. Используйте кастом ThreadFactory
если вы хотите использовать потоки демона.
1. newSingleThreadScheduledExecutor
методы возвращают ненастраиваемую оболочку, которая делегирует ScheduledThreadPoolExecutor
,