Timer与ScheduledExecutorService间的选择
生活随笔
收集整理的這篇文章主要介紹了
Timer与ScheduledExecutorService间的选择
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java.util.Timer計時器有管理任務延遲執行("如1000ms后執行任務")以及周期性執行("如每500ms執行一次該任務")。
但是,Timer存在一些缺陷,因此你應該考慮使用ScheduledThreadPoolExecutor作為代替品,Timer對調度的支持是基于絕對時間,而不是相對時間的,
由此任務對系統時鐘的改變是敏感的;ScheduledThreadExecutor只支持相對時間。
Timer的另一個問題在于,如果TimerTask拋出未檢查的異常,Timer將會產生無法預料的行為。
Timer線程并不捕獲異常,所以TimerTask拋出的未檢查的異常會終止timer線程。
這種情況下,Timer也不會再重新恢復線程的執行了;它錯誤的認為整個Timer都被取消了。
此時,已經被安排但尚未執行的TimerTask永遠不會再執行了,新的任務也不能被調度了。
timer的bug:60秒執行一次的話,如果用戶修改了時間的話 那么時針都會歸0,本來是臨近10秒執行的時候timer又會重新計時一次 再等60才執行。
但是,Timer存在一些缺陷,因此你應該考慮使用ScheduledThreadPoolExecutor作為代替品,Timer對調度的支持是基于絕對時間,而不是相對時間的,
由此任務對系統時鐘的改變是敏感的;ScheduledThreadExecutor只支持相對時間。
Timer的另一個問題在于,如果TimerTask拋出未檢查的異常,Timer將會產生無法預料的行為。
Timer線程并不捕獲異常,所以TimerTask拋出的未檢查的異常會終止timer線程。
這種情況下,Timer也不會再重新恢復線程的執行了;它錯誤的認為整個Timer都被取消了。
此時,已經被安排但尚未執行的TimerTask永遠不會再執行了,新的任務也不能被調度了。
timer的bug:60秒執行一次的話,如果用戶修改了時間的話 那么時針都會歸0,本來是臨近10秒執行的時候timer又會重新計時一次 再等60才執行。
總結
以上是生活随笔為你收集整理的Timer与ScheduledExecutorService间的选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果 iOS/iPadOS 16.4 开
- 下一篇: MordenPHP阅读笔记(一)——先跑