第五章 定時器Timer

2021-10-04 09:33:05 字數 2650 閱讀 7969

timer類主要作用是是在指定的時間開始執行某一任務,而負責封裝任務的是timertask類(抽象類),我們將執行計畫任務的**放入timertask的子類中。

該方法可以規定任務執行的時間

public class run1 

}public static void main(string args) catch (parseexception e) }}

輸出:

任務雖然已執行完,但**狀態仍為紅色。出現這樣情況的原因:在建立timer物件時,會啟動乙個新的執行緒,該執行緒不是守護執行緒,因此會一直執行。

public timer() 

public timer(string name)

而如果我們在建立timer物件時,將其設定守護執行緒的話

private static timer timer = new timer(true);
如果任務執行的時間早於當前時間,則立即執行task任務

timer中允許有多個timertask任務

public class run1 

}static public class mytask2 extends timertask

}public static void main(string args) catch (parseexception e) }}

timertask是以佇列的方式乙個乙個被順序執行,因此執行的時間可能和預期的時間不一致,因為前面的任務可能消耗的時間較長,則後面的任務執行的時間也會被延遲。例如,任務1負責輸出一句話後,然後睡眠2s;則任務2的執行時間就會被影響,其執行時間為計畫往後延遲2s。

在指定的日期後,按指定的時間間隔period,週期性的無限迴圈執行某一任務

public static void main(string args) catch (parseexception e) }}

同樣的,若計畫時間早於當前時間,任務立即執行;

如果任務中有延遲,比如任務1負責輸出開始時間,睡眠5s後,輸出結束時間,而任務1的時間間隔為5s:

以執行該方法的當前時間為基礎,延遲period毫秒後執行一次任務

timer.schedule(task, 3000);
以執行該方法的當前時間為基礎,延遲period毫秒,以period為時間間隔無限次數執行某一任務

timer.schedule(task, 3000, 2000);
方法schedule和scheduleatfixedrate都會按順序執行,無需考慮非執行緒安全的情況。

(1)兩者的主要區別在於不延時的情況,所謂的延時,指的是:schedule(timertask task, date time, long period)引數中的時間間隔period小於任務執行的時間(比如說任務呼叫了sleep方法)。如下所示:

public class run1 catch (interruptedexception e) }}

public static void main(string args) catch (parseexception e) }}

(2)schedule方法不具有追趕執行性schedule(timertask task, date firsttime, long period)方法需要設定任務計畫執行時間,而如果計畫時間早於當前時間,則計畫時間到當前時間這段時間的任務不會執行,它只會執行當前時間之後的任務;而scheduleatfixedrate在這種情況下,兩個時間段內的任務會補充性執行

該方法的作用是將自身從任務佇列中清除(不影響其他任務)。

static public class mytask extends timertask 

}

該方法將任務佇列中的全部任務清空。

private static timer timer = new timer();

static public class mytask extends timertask

//同時程序按鈕由紅色變成灰色

}

但有時該方法不一定會停止執行計畫任務,而是會正常執行

public class run1 

}public static void main(string args) catch (parseexception e) }}

}

輸出:

這是由於cancel()方法有時沒有搶到queue鎖,因此任務繼續正常執行。

第五章 定時器Timer序言

定時器很重要。上家公司有用的,是用來做定期資料同步的。以前老同學有用到,曾經就定時器討論過一次,還給過一次他我關於spring task的總結。但是並沒有意識到定時器與多執行緒的關係,或者說,上一次再學定時器的時候,還沒有多執行緒方面的一些鋪墊。這次重新學習多執行緒,再與定時器,相信會對定時器有乙個...

第五章 定時器與數碼管基礎

首先介紹一下定時器的使用步驟 設定特殊功能暫存器tmod,配置工作模式。設定技數暫存器的th0和tl0的初值。設定tcon,也就是tr0和tr1,讓定時器開始工作。判斷tf0或tf1溢位標誌,若為1則為溢位。注意 定時器的初值計算 12mhz,12 12也就是1mhz,1s 1 000 000次機器...

Timer定時器開發

timer定時器開發 定時器的作用是不佔執行緒的等待乙個確定時間,同樣通過callback來通知定時器到期。參考 定時器的建立 同樣是在wftaskfactory類裡的方法 using timer callback t std function class wftaskfactory static ...