我使用的ScheduledExecutorService计划每分钟无限运行一次
有人可以告诉我何时调用ScheduledExecutorService上的关闭程序
我已经研究了Guava MoreExecutors。这不起作用,因为我需要阻塞主线程以保持其他线程连续运行
用例
我有一项任务是不断监视系统以检查延迟/故障。
我需要定期运行此任务并基于它配置Cloudwatch警报。理想情况下,我希望任务即使在出现延迟尖峰时也能继续执行,因为会触发警报
因此,我正在使用ScheduledExecutorService定期安排任务。
我想知道在执行程序服务上调用shutdown()的理想位置
答案 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
。