Java 定時(shí)器

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í)行,其返回值將是未定義的。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Timer 定時(shí)器相信都不會(huì)陌生,之所以拿它來做源碼分析,是發(fā)現(xiàn)整個(gè)控制流程可以體現(xiàn)很多有意思的東西。 在業(yè)務(wù)開發(fā)...
    石先閱讀 6,505評(píng)論 2 13
  • Timer總結(jié) Timer是jdk自帶的定時(shí)器,可以實(shí)現(xiàn)單機(jī)基本的定時(shí)任務(wù), 從指定時(shí)間開始,每隔一段時(shí)間固定執(zhí)行...
    深谷9002閱讀 1,212評(píng)論 0 0
  • 記錄幾種定時(shí)器的實(shí)現(xiàn)方式——僅僅在應(yīng)用層面,簡(jiǎn)單的實(shí)現(xiàn)。本文在完成過程中參考了詳解java定時(shí)任務(wù)、Spring定...
    峽客閱讀 4,779評(píng)論 0 21
  • 一點(diǎn)知識(shí) 在JAVA開發(fā)領(lǐng)域,目前可以通過以下幾種方式進(jìn)行定時(shí)任務(wù): Timer:jdk中自帶的一個(gè)定時(shí)調(diào)度類,可...
    雅倩蘭爸爸閱讀 3,925評(píng)論 1 28
  • JDK中的java.util提供了Timer類,可以定時(shí)執(zhí)行特定的任務(wù) TimerTask表示定時(shí)器執(zhí)行的某一項(xiàng)任...
    若愚同學(xué)閱讀 199評(píng)論 0 1

友情鏈接更多精彩內(nèi)容