ScheduledExecutorService调用关闭以进行无限调度

时间:2018-11-21 06:04:01

标签: java executorservice scheduledexecutorservice

我使用的ScheduledExecutorService计划每分钟无限运行一次

有人可以告诉我何时调用ScheduledExecutorService上的关闭程序

我已经研究了Guava MoreExecutors。这不起作用,因为我需要阻塞主线程以保持其他线程连续运行

用例

我有一项任务是不断监视系统以检查延迟/故障。

我需要定期运行此任务并基于它配置Cloudwatch警报。理想情况下,我希望任务即使在出现延迟尖峰时也能继续执行,因为会触发警报

因此,我正在使用ScheduledExecutorService定期安排任务。

我想知道在执行程序服务上调用shutdown()的理想位置

1 个答案:

答案 0 :(得分:0)

当前,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,如果不取消定期任务,它们也会使JVM保持活动状态。如果要使用守护程序线程,请使用自定义shutdown


1。 ThreadFactory方法返回一个不可配置的包装器,该包装器委派给newSingleThreadScheduledExecutor