1. 程式人生 > 其它 >【Java學習筆記(八十四)】 之 Timer定時器,TimerTask任務

【Java學習筆記(八十四)】 之 Timer定時器,TimerTask任務

技術標籤:# 多執行緒Java學習筆記java佇列

本文章由公號【開發小鴿】釋出!歡迎關注!!!


老規矩–妹妹鎮樓:

一. 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方法會將計劃時間到當前時間之間的任務補充性地執行。