定時器 Timer
[toc]
定時器 Timer 的使用
Timer 類主要負責計劃任務的功能,也就是在指定時間開始執(zhí)行某一個任務。
主要作用:設置計劃任務,但封裝任務的類卻是 TimerTask 類。
常用方法
schedule()
- schedule(TimerTask task,Date time):在指定的日期執(zhí)行一次某一任務
- schedule(TimerTask task,Date firstTime,long period):在指定的日期之后按指定的間隔周期,無限循環(huán)地執(zhí)行某一任務。
-
schedule(TimerTask task,long delay)
:以執(zhí)行該方法當前的時間為基礎時間,延遲指定毫秒數(shù)后執(zhí)行一次任務。 - schedule(TimerTask task,long delay,long period):以執(zhí)行該方法當前的時間為基礎時間,延遲指定毫秒數(shù)后執(zhí)行一次任務,再以某一時間間隔無限次地執(zhí)行某一任務。
Timer 中允許有多個 TimerTask 任務:以隊列的方式一個個被順序性的執(zhí)行。
TimerTask.cancel() & Timer.cancel 的區(qū)別:
- TimerTask 的 cancel():將自身從任務隊列中進行清除
- Timer 的 cancel():將任務隊列中全部的任務進行清空(有時不一定會停止任務)
scheduleAtFixedRate()
與 schedule() 方法基本一致,主要區(qū)別:追趕性。
- 不延時的情況下,兩者一致。
- 如果出現(xiàn)延時,則 scheduleAtFixedRate() 會以上一次任務結束的時間來作為參考計算,而 schedule() 會立即執(zhí)行。
注意
推薦使用 ScheduledExecutorService。
多線程并行處理定時任務時,Timer 運行多個 TimeTask 時,只要其中之一沒有捕獲拋出的異常,其它任務便會自動終止運行,使用 ScheduledExecutorService 則沒有這個問題。