![](/img/trans.png)
[英]What should I do in order to prevent the UI from freezing(scheduledexecutorservice)
[英]What do I do first - cancel ScheduledFuture or shutdown ScheduledExecutorService?
我的代碼:
ScheduledServiceExecutor service = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture future = service.scheduleWithFixedDelay(
runnable, 1, 1, TimeUnit.MILLISECONDS
);
// ...
// now it's time to shut it all down
future.cancel(true);
service.shutdown();
我在這兒嗎? 也許我應該這樣做:
service.shutdown();
future.cancel(true);
你怎么看?
在這種情況下,您只需要調用shutdown()
。
ScheduledThreadPoolExecutor
有兩個選項,這是在幕后創建的。 getExecuteExistingDelayedTasksAfterShutdownPolicy()
默認為true
, getContinueExecutingPeriodicTasksAfterShutdownPolicy()
默認為false
。 因此,簡單地關閉服務將導致定期任務被取消,但任何延遲的任務仍將被執行。 由於有問題的任務是一項定期任務,因此將在關閉時取消。
我個人認為最好在關機前手動調用.cancel(true)
。 雖然在操作上這沒有什么不同的效果,但我認為對於那些可能不知道執行程序上的選項的程序員來說,看到周期性任務意味着在關閉時被取消是有好處的。 這也意味着如果有人進來並將執行程序更改為在關閉時未取消的執行程序,則此任務仍將被取消。 所以,我認為這里的主要好處是清晰的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.