Timer類的主要作用是設置計劃任務,但封裝任務的卻是TimerTask類。
1.Timer.schedule(TimerTask task,Date time):在指定日期執行某一次任務。
任務執行完進程不會銷毀,創建1個Timer就是啟動一個新的線程,該線程不是守護線程,會一直運行下去。
方案:Timer timer = new Timer(true);//設置其為守護線程
2.Timer中允許多個TimerTask任務
TimerTask是以隊列的方式一個一個執行的,所以預期的執行時間可能和真實的執行時間不一樣??赡芮懊娴娜蝿蘸臅r過長,那么后面的任務運行時間也會被延后。
3.Timer.schedule(TimerTask task,Date firstTime,long period):在指定日期之后的間隔周期,無限循環的執行某一個任務。
ps,若計劃時間早于當前時間,則立即執行task任務。
4.?TimerTask的cancel():將自身從任務隊列中清楚,其他任務不受影響。
Timer類的cancel():將任務隊列中的所有任務清空。ps,并一定會馬上停止所有任務,原因在于Timer類中的cancel()有時并沒有爭搶到queue鎖,而讓TimerTask類中的任務繼續執行。
5.Timer.schedule(TimerTask task,long delay):在當前時間的基礎上延遲多長時間執行任務。
6.Timer.schedule(TimerTask task,long delay,long period):在當前時間的基礎上延遲多長時間執行任務,再以某一時間間隔執行任務。
7.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
schedule方法和scheduleAtFixedRate方法都是按順序執行的,所以不用擔心非線程安全的問題。
schedule方法和scheduleAtFixedRate方法的區別在于:
schedule不具有追趕性;
scheduleAtFixedRate具有追趕性,即如果計劃時間早于當前時間,這個時間段內的task會被“補充性”的執行下。
Timer可以用于Android技術中,實現類似于輪詢、動畫等功能。