TimerTask java
實現Runnable接口。能夠被Timer調度執行一次或者週期性執行的任務類。位於java.util包內。 安全
實例屬性: spa
int state; // 包括VIRGIN、SCHEDULED、EXECUTED、CANCELLED 線程
long nextExecutionTime; // 下一次任務執行時刻 對象
long period; // 週期性任務的執行時間間隔 排序
方法: 接口
TimerTask() 構造方法 隊列
abstract void run() rem
boolean cancel() 取消任務,更改任務狀態state爲CANCELLED。若是一次性任務尚未被執行或者是週期性任務,返回true。對於一次性任務,若是任務已經處於SCHEDULLED狀態但還沒有執行則永遠不會被執行。而對於週期性任務,若是任務尚未被調度,則任務將不會被執行;而若是已經在執行,則執行完當前週期,但以後不再會被執行。 get
這個方法能夠被屢次調用,但第二次以及以後的調用沒有任何效果。
long scheduledExecutionTime():
返回本任務將要被執行的時刻,對於週期性任務沒有什麼意義。
Timer
線程安全的,多個線程能夠共享一個Timer實例。
用來調度任務在未來執行一次或者週期性執行的輔助類。
每一個Timer對象都對應一個後臺線程(用於順序執行timer上的任務)。
每一個任務都應該能快速完成,不然若是某個TimerTask的執行佔用太多
時間會影響後面的任務執行。
若想快速終止任務執行,能夠調用它的cancel方法。
不提供實時保證,由於使用的Object.wait()方法。
實例屬性:
TaskQueue queue = new TaskQueue(); // 任務隊列,Binary Heap
TimerThread thread = new TimerThread(queue);
經過schedule方法將TimerTask加入TaskQueue
方法:
scheduleAtFixedRate:
sched(task, System.currentTimeMillis()+delay, period);
sechedule:
sched(task, System.currentTimeMillis()+delay, -period);
TimerThread extends Thread
執行具體任務的線程。
從任務隊列取出executionTime最小的元素,而後判斷若是是一次性任務則...
TaskQueue
任務隊列類。是TimerTask的優先隊列,根據nextExecutionTime排序。
基於Balanced Binary Heap實現,add、removeMin和rescheduleMin操做的時間複雜度爲log(n)。getMin操做的時間複雜度爲O(n)。小頂堆。
經過add(TimerTask task)加入任務