簡體   English   中英

ScheduledExecutorService調用關閉以進行無限調度

[英]ScheduledExecutorService call shutdown for infinite scheduling

我正在使用ScheduledExecutorService,該服務計划無限制地每分鍾運行

有人可以告訴我何時在ScheduledExecutorService上調用關機嗎

我已經研究了番石榴MoreExecutors。 這不起作用,因為我需要阻塞主線程以保持其他線程連續運行

用例

我的任務是不斷監視系統以檢查延遲/故障。

我需要定期運行此任務,並基於此任務配置Cloudwatch警報。 理想情況下,我希望任務即使在出現延遲尖峰時也能繼續執行,因為會觸發警報

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

我想知道在執行程序服務上調用shutdown()的理想位置

當前, 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM