jdk中的timer 是乙個非常早期的類,在1.2中就引入了。現在看來,不算乙個很好的設計。
timer timer = new timer();
timer.schedule(new mytimertask(),1000,10);
其中mytimertask 是乙個實現timertask的類,主要是實現run 方法。
timer中有2個核心類,乙個是timer,乙個timertask
前者主要是定義定時任務什麼時候執行,後者主要是定義具體定時任務。
timer
public class timer
其中taskqueue 是使用陣列實現的乙個簡易的堆,另外乙個值得注意的屬性是 timerthread
timer使用唯一的執行緒負責輪詢並執行任務。timer的優點在於簡單易用,但也因為所有任務都是由同乙個執行緒來排程,因此整個過程是序列執行的,同一時間只能有乙個任務在執行,所以在任務量多的情況下不方便使用。
1.timer 只能被單執行緒排程
2.timertask **現的異常會影響到timer 的執行
由於這兩點缺陷,jdk1.5 支援了新的定時器方案 scheduledexecutorservice。
public static void main(string args)
},1, 1, timeunit.seconds);
}
相比timer,scheduledexecutorservice 解決了同乙個定時器排程多個任務的阻塞問題,並且任務異常不會中斷 scheduledexecutorservice。
scheduledexecutorservice 提供了2種常用的週期排程方法 scheduleatfixedrate 和 schedulewithfixeddelay。
scheduleatfixedrate 基於固定時間間隔進行任務排程,schedulewithfixeddelay 取決於每次任務執行的時間長短,是基於不固定時間間隔的任務排程。
scheduledexecutorservice 底層使用的資料結構為 priorityqueue。
java中定時器
void cancel 終止此計時器,丟棄所有當前已安排的任務。int purge 從此計時器的任務佇列中移除所有已取消的任務。void schedule timertask task,date time 安排在指定的時間執行指定的任務。void schedule timertask task,da...
JAVA 定時器時間格式
格式 秒 分 小時 日 月 周 年 序號 說明 是否必填 允許填寫的值 允許的萬用字元 1 秒 是0 59 2 分 是0 59 3 小時 是 0 23 4 日 是1 31 lw 5 月 是1 12 orjan dec 6 周 是1 7 orsun sat l 7 年 否empty 或1970 209...
Java定時器和Quartz
自定義乙個定時器 author lw public class mytimer extends thread override public void run catch interruptedexception e send 開始執行任務 public void execute 定時任務 priv...