Завершение вызова 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 ,

Другие вопросы по тегам