Java 定時(shí)器
1. 概述
Timer 可以按計(jì)劃執(zhí)行重復(fù)的任務(wù)或者定時(shí)執(zhí)行指定任務(wù),這是因?yàn)?Timer 內(nèi)部利用了一個(gè)后臺(tái)線程 TimerThread 有計(jì)劃地執(zhí)行指定任務(wù)。
-
Timer:是一個(gè)實(shí)用工具類,該類用來調(diào)度一個(gè)線程(schedule a thread) ,使它可以在將來某一時(shí)刻執(zhí)行。Java 的 Timer 類可以調(diào)度一個(gè)任務(wù)運(yùn)行一次或定期循環(huán)運(yùn)行。
Timer tasks should complete quickly,即定時(shí)器中的操作要盡可能花費(fèi)短的時(shí)間。
TimerTask:一個(gè)抽象類,它實(shí)現(xiàn)了 Runnable 接口。我們需要擴(kuò)展該類以便創(chuàng)建自己的 TimerTask,這個(gè) TimerTask 可以被 Timer 調(diào)度。
一個(gè) Timer 對(duì)象對(duì)應(yīng)的是單個(gè)后臺(tái)線程,其內(nèi)部維護(hù)了一個(gè) TaskQueue,用于順序執(zhí)行定時(shí)器任務(wù) TimeTask。
即:Timer 是定時(shí)器,TimerTask 是定時(shí)器任務(wù)。
2. 例子
舉個(gè)例子:
public class TimerDemo {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
// 重寫 run() 方法,返回系統(tǒng)時(shí)間
System.out.println(System.currentTimeMillis());
}
};
Timer timer = new Timer();
// 在經(jīng)過 2000 毫秒的初始化延時(shí)后執(zhí)行一次(單詞執(zhí)行)
timer.schedule(task, 2000);
// 從現(xiàn)在開始每間隔 1000 ms 計(jì)劃執(zhí)行一個(gè)任務(wù)(規(guī)律性重復(fù)執(zhí)行調(diào)度 TimerTask)
timer.schedule(task, 0 ,1000);
}
}
3. Timer 常用構(gòu)造函數(shù)和方法
3.1 Timer 的構(gòu)造函數(shù)
-
Timer():創(chuàng)建一個(gè)新的定時(shí)器
3.2 Timer 的方法
-
void cancel():終止該定時(shí)器。(當(dāng)應(yīng)用程序想要快速地終止一個(gè)定時(shí)器執(zhí)行線程,它應(yīng)該調(diào)用 Timer 的cancel()方法。 -
int purge():從該定時(shí)器隊(duì)列中移除所有取消的定時(shí)任務(wù)并且返回被移除任務(wù)的數(shù)目。 -
void schedule(TimerTask task, Date time):在某個(gè)時(shí)間點(diǎn)調(diào)度任務(wù)執(zhí)行。如timer.schedule(task, 2000)。 -
void schedule(TimerTask task, long delay, long period):以當(dāng)前的時(shí)間為參考時(shí)間,在此時(shí)間基礎(chǔ)上延遲指定的毫秒數(shù),再以某一間隔時(shí)間無限次數(shù)地執(zhí)行某一任務(wù)。如timer.schedule(task, 0, 1000)。 -
void schedule(TimerTask task, Date firstTime, long period):調(diào)度任務(wù)于 firstTime 開始,以固定時(shí)間間隔的方式重復(fù)執(zhí)行,后續(xù)將以大約 period 毫秒數(shù)的固定時(shí)間間隔執(zhí)行。
4. Timer 常用方法
定時(shí)任務(wù)都是抽象類 TimerTask 子類的實(shí)例,這些子類實(shí)現(xiàn)了 Runnable 接口,當(dāng)子類化 TimerTask 的時(shí)候,你需要重寫其 void run() 方法。
注意:定時(shí)任務(wù)應(yīng)該很快完成。
方法
-
boolean cancel():取消這個(gè)定時(shí)任務(wù) -
long scheduleExecutionTime():返回此定時(shí)任務(wù)最近實(shí)際被調(diào)度執(zhí)行的時(shí)間(當(dāng)定時(shí)任務(wù)正在執(zhí)行此方法被調(diào)用了,返回值就是運(yùn)行中定時(shí)任務(wù)的調(diào)度執(zhí)行時(shí)間)。 -
long scheduleExecutionTime():返回此定時(shí)任務(wù)最近實(shí)際被調(diào)度執(zhí)行的時(shí)間。若定時(shí)任務(wù)還沒有開始首次執(zhí)行,其返回值將是未定義的。