2010-10-08 52 views
1

ScheduledThreadPoolExecutor沒有與下面的吸氣劑(和相應的setter方法)兩個屬性:的ScheduledThreadPoolExecutor + setXXXXShutdownPolicy()

boolean getContinueExistingPeriodicTasksAfterShutdownPolicy() 

獲得有關是否繼續執行現有定期任務,即使在此執行程序已被政策關掉。在這種情況下,這些任務將僅在shutdownNow時或在已經關閉時將策略設置爲false之後終止。該值默認爲false。

boolean getExecuteExistingDelayedTasksAfterShutdownPolicy() 

獲取是否執行現有延遲任務的策略,即使此執行程序已關閉。在這種情況下,這些任務將僅在shutdownNow時終止,或者在已經關閉時將策略設置爲false之後終止。該值默認爲true。

爲什麼他們有不同的默認值,是否有理由改變這些屬性的值?

此外,如果您只是使用Executors靜態方法創建ScheduledExecutorService(它沒有方法來調整上述屬性)的實例,您應該如何更改/配置它們?

回答

2

第一:

getContinueExistingPeriodicTasksAfterShutdownPolicy() 

如果返回false,那麼當你關閉執行人,執行人將取消/抑制所有周期性任務。執行週期性任務時,執行程序可以讓它們完成。將其設置爲true會告訴執行程序允許所有正在運行的定期任務完成。

二:

getExecuteExistingDelayedTasksAfterShutdownPolicy() 

有跡象表明,與初始延遲定期運行,而不是一些任務。這決定了執行程序服務在關閉時是否應取消這些非週期性任務(默認爲true)。

請注意,週期任務是安排與scheduleAtFixedRate安排的一個任務,而非週期安排與scheduleWithFixedDelay安排。

爲什麼他們有不同的默認值,是否有理由改變這些屬性的值?

如果您有任務必須運行,而不管關閉與否,您都需要更改它們。

是你應該怎麼改/配置它們,如果你只是使用執行人的靜態方法來創建ScheduledExecutorService的實例

一般來說,如果你想控制這種類型的功能,你將不得不創建你自己的ScheduledThreadPoolExecutor。如果你看看Executors.newScheduledThreadPool的來源,你可以使用它並從那裏處理。

ScheduledThreadPoolExecutor l = new ScheduledThreadPoolExecutor(1); 
    l.setContinueExistingPeriodicTasksAfterShutdownPolicy(true); 
+0

感謝您的回答。這似乎很奇怪,爲什麼默認行爲是當執行程序爲shutdown()時允許延遲任務運行,但週期性任務不是。 – 2010-10-08 22:30:16

相關問題