天天看點

TimerTask定時任務源碼解析

TimerTask定時任務

1. 介紹

​java.util.TimerTask​

​​是一個被Timer類執行的任務。繼承​

​Runnable​

​接口

2. 類變量

有下面四種狀态:

int state = VIRGIN;

    static final int VIRGIN = 0;

    static final int SCHEDULED   = 1;

    static final int EXECUTED    = 2;

    static final int CANCELLED   = 3;      

​VIRGIN​

​:初始化狀态,任務還沒有被執行

​SCHEDULED​

​:任務已經計劃執行(如果不是一個重複執行的任務,它就還沒有被執行過)

​EXECUTED​

​:非重複性任務已經被執行了(或者正在執行),并且沒有被取消

​CANCELLED​

​:任務已經被取消(調用TimerTask.cancel)

​lock​

​:控制通路TimerTask内部的鎖

final Object lock = new Object();      

​nextExecutionTime​

​:下一次任務執行的時間,如果是重複性任務,會在每一個任務執行前更新

long nextExecutionTime;      

​period​

​​:重複性任務的周期時間,一個正值表明是固定頻率​

​fixed-rate​

​​執行,負值表明固定延遲​

​fixed-delay​

​執行,0表示非重複性任務。固定頻率與固定延遲差別會在Timer定時器中看着代碼講

long period = 0;      

3.成員方法

構造方法:

protected TimerTask() {
   }      

run():timerTask需要執行的具體操作,需要重寫

public abstract void run();      

cancel():取消任務,如果任務正在執行中,會執行完。

public boolean cancel() {
        synchronized(lock) {
            boolean result = (state == SCHEDULED);
            state = CANCELLED;
            return result;
        }
    }      

scheduledExecutionTime():最近一次執行時間

public long scheduledExecutionTime() {
        synchronized(lock) {
            return (period < 0 ? nextExecutionTime + period
                               : nextExecutionTime - period);
        }
    }