Timer定時器詳解

Timer定時器主要作定時任務或者按照必定的時間間隔作任務,例如天天4點鐘定時執行做業等

Timer的特性
一、它屬於單線程的,每建立個Timer實例,就會建立一個新線程
二、Timer默認狀況下不是守護線程,能夠設置爲守護線程new Timer(true),守護線程再進程中沒有其餘線程時,守護線程將銷燬
三、TimerTask是以隊列的方式一個個的執行
四、TimerTask中的cancel()方法將自身中從隊列中清除
五、Timer中的cancel()方法是將任務隊列中的所有任務進行取消,有時並不必定中止任務,緣由是Timer類中的cancel()方法有時並無競爭到鎖,
(這個能夠從Timer源碼中看到,TimerThread和TaskQueue兩個內部類)
六、TimerTask中的run方法沒法拋出,因此要進行try catch捕獲,若是其中任何一個任務發生異常沒有被捕獲,則其餘任務也將被終止

方法詳解:
(1)schedule(TimerTask task, Date executeTime)
當executeTime<=currentTime時,task任務會在currentTimer當即執行
當executeTime>currentTime時,task會在將來的executeTime執行

(2)schedule(TimerTask task, Date firstTime, long period)
當firstTime <=currentTime時,task任務會在currentTimer當即執行,
當firstTime >currentTime時,task會在將來的executeTime執行,
執行任務所用的時間taskUsedTime<peroid,則下一個任務執行的時間是上次任務執行完成的時間+peroid,任務按時間間隔peroid週期性執行任務
執行任務所用的時間taskUsedTime>peroid,則下一個任務執行的時間是上次任務執行完成的時間+taskUsedTime,任務按時間間隔taskUsedTime 週期性執行任務


(3)schedule(TimerTask task, long delay)
任務延遲delay毫秒進行執行

(4)schedule(TimerTask task, long delay, long period)
A、延遲delay毫秒第一次執行,
B、執行任務所用的時間taskUsedTime<peroid,則下一個任務執行的時間是上次任務執行完成的時間+peroid, 任務按時間間隔peroid週期性執行任務
C、執行任務所用的時間taskUsedTime>peroid,則下一個任務執行的時間是上次任務執行完成的時間+taskUsedTime, 任務按時間間隔taskUsedTime 週期性執行任務

(5)scheduleAtFixedRate(TimerTask task, long delay, long period)

(6)scheduleAtFixedRate(TimerTask task, Date firstTime,  long period)
         startTime = currentTime
A、當firstTime>currentTime,任務則在currentTime執行
B、當firstTime<currentTime,任務會發生追趕執行,追趕執行的次數expectCount=(currentTime-firstTime)/peroid+1;
  第一個peroid屬於追趕階段,若是追遇上則等待執行startTime+peroid時間任務,若是沒有追遇上則直接執行startTime+peroid時間的任務