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



我正在使用一个ScheduledExecutitorService,该服务计划每分钟无限运行一次

有人能告诉我什么时候调用ScheduledExecutiorService 的关闭吗

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

用例

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

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

因此,我使用ScheduledExecutiorService来定期安排任务。

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

当前,Executors中的工厂方法返回ScheduledThreadPoolExecutor1的一个实例。默认情况下,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

相关内容

  • 没有找到相关文章

最新更新