【Java學習筆記(八十四)】 之 Timer定時器,TimerTask任務
阿新 • • 發佈:2020-12-23
本文章由公號【開發小鴿】釋出!歡迎關注!!!
老規矩–妹妹鎮樓:
一. Timer定時器
(一) 概述
JDK庫中,Timer類負責計劃任務,即確定在指定的時間開始執行某一個任務,而任務程式碼需要封裝在TimeTask類的子類中。
(二) Timer類的方法
1. schedule(TimeTask task, Date time)
在指定的日期執行一次任務,當指定的日期早於當前的時間時,它會從當前時間開始執行;當指定的日期晚於當前的時間時,它會從指定的日期開始執行。對於多個TimeTask任務,這些任務是以佇列的方式按照順序執行的,因此後面的任務執行的時間可能要隨著每個任務的耗時來決定,可能有任務會超時導致後面的任務延時啟動。
建立TimerTask類的子類:
package timer;
import java.sql.Timestamp;
import java.util.Date;
import java.util.TimerTask;
public class MyTaskA extends TimerTask {
@Override
public void run() {
System.out.println("A start " + new Date());
System.out.println("A end " + new Date());
}
}
建立測試類:
package timer;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class Test {
public static void main(String[] args) {
System.out.println("當前時間 " + new Date());
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
System.out.println("A計劃時間 " + time);
MyTaskA myTaskA = new MyTaskA();
Timer timer = new Timer();
timer.schedule(myTaskA, time);
}
}
2. schedule(TimerTask task, Date firstTime, long period)
在指定的日期之後按指定的間隔週期,無限迴圈地執行某一任務。如果計劃時間早於當前時間,則立即執行任務,且迴圈執行;如果計劃時間晚於當前時間,則在計劃時間迴圈執行任務;若任務耗時超過了間隔時間,則下一個任務的開始時間以超時的任務結束時間為準。
3. cancel()
Timer類的cancel()方法將任務佇列中的所有任務都清空,且程序被銷燬。不過有時cancel()方法也搶不到queue鎖,讓任務正常執行,總會有這樣的情況出現。
TimerTask類的cancel()方法將自身這個任務從任務佇列中清除。
4. schedule(TimerTask task , long delay)
以執行schedule方法當前的時間為基準,在此基礎上延遲指定的毫秒數後執行一次TimerTask任務。
5. schedule(TimerTask task . long delay, long period)
以執行schedule方法當前的時間為基準,在此基礎上延遲指定的毫秒數後迴圈執行TimerTask任務。
6. scheduleAtFixedRate方法與 schedule方法的區別
scheduleAtFixedRate方法具有追趕性,當任務的計劃時間在當前時間之前時,schedule直接從當前時間開始執行,忽略計劃時間到當前時間之間的任務。而scheduleArFixedRate方法會將計劃時間到當前時間之間的任務補充性地執行。