Timer和TimerTask定時器使用

2021-09-29 18:28:21 字數 4434 閱讀 8133

timer是一種定時器工具,用來在乙個後台執行緒計畫執行指定任務。它可以計畫執行乙個任務一次或反覆多次。

timertask乙個抽象類,它的子類代表乙個可以被timer計畫的任務。具體的任務在timertask中run介面中實現。

通過timer中的schedule方法啟動定時任務。

啟動乙個定時器實質是啟動乙個執行緒

1、在指定日期執行定時器任務,只執行一次

public

static

void

main(string args) throws parseexception

}, date); //在指定的日期執行一次定時任務

/*如果date日期在今天之前,則啟動定時器後,立即執行一次定時任務run方法*/

/*如果date日期在今天之後,則啟動定時器後,會在指定的將來日期執行一次任務run方法*/

}

2、在距當前時刻的一段時間後執行定時器任務,只執行一次

public

static

void

main(string args)

}, 5000); //指定啟動定時器5s之後執行定時器任務run方法,並且只執行一次

}

3、在指定的時間後,每隔指定的時間,重複執行定時器任務

public

static

void

main(string args) throws parseexception

}, date, 2000);

/*如果指定的date時間是當天或者今天之前,啟動定時器後會立即每隔2s執行一次定時器任務*/

/*如果指定的date時間是未來的某天,啟動定時器後會在未來的那天開始,每隔2s執行一次定時器任務*/

}

4、在距當前時刻的一段指定距離後,每隔指定時間執行一次定時器任務

public

static

void

main(string args)

}, 5000, 2000);

/*當啟動定時器後,5s之後開始每隔2s執行一次定時器任務*/

}

停止定時器實質是終止timer的執行緒。預設情況下,建立的timer執行緒會一直執行,如果要停止的話主要有以下四種方法終止timer執行緒:

舉例用cancel方法終止timer執行緒

public

static

void

main(string args) throws interruptedexception

}, 5000, 2000);

/*如果主線程不休眠一段時間,就執行了cancel方法,那麼定時器還沒來得及執行就會被關閉*/

thread.sleep(6000);

timer.cancel();

}

1、schedule

public

static

void

main(string args) throws parseexception

}, date, 10*1000);

}

執行,輸出如下:

mon

feb 12 18:35

:41cst 2018系統正在執行……

monfeb 12 18:35

:51cst 2018系統正在執行……

monfeb 12 18:36

:01cst 2018系統正在執行……

monfeb 12 18:36

:11cst 2018系統正在執行……

monfeb 12 18:36

:21cst 2018系統正在執行……

monfeb 12 18:36

:31cst 2018系統正在執行……

………………………………

如果定時器的起始時間是過去的某個時刻,那麼當啟動定時器後,會從當前時刻開始算,每隔10s執行一次定時器任務。指定的起始時間是2018-02-12 18:33:00,而當前時間是18:35:41,因此從18:35:41時刻開始每隔10s執行一次定時器任務。

2、scheduleatfixedrate

public

static

void

main(string args) throws parseexception

}, date, 10*1000);

}

執行定時器方法,輸出結果如下:

mon

feb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:10cst 2018系統正在執行……

monfeb 12 18:42

:20cst 2018系統正在執行……

monfeb 12 18:42

:30cst 2018系統正在執行……

如果指定的起始時間是過去某個時刻,定時器會迅速執行完從起始時刻到當前時刻要執行的定時器任務次數,然後再每隔10s執行一次定時器任務。

網上有段解釋:

對於scheduleatfixedrate,如果指定開始時間是2005/12/30 14:10:00,間隔為3分鐘,如果在14:17:00分執行這個程式,會立刻執行3次定時器任務,分別對應14:10:00、14:13:00、14:16:00時刻應該執行的定時任務,那麼第四次執行定時器任務的時間應該是14:19:00,而不是14:20:00,就是說是從指定的開始時間開始計時,而不是從執行時間開始計時。

但是如果用schedule,間隔時間是3分鐘,指定開始時間是2005/12/30 14:10:00,那麼在14:17:00分執行這個程式,則立即執行程式一次。並且下一次的執行時間是 14:20,而不是從14:10開始算的週期(14:19)。

啟動乙個定時器實質是啟動乙個執行緒,每建立乙個定時器,就需要新建乙個執行緒,用新建立的執行緒去執行定時器任務。

當執行timer timer = new timer();時,執行了timer的無參構造器

public

timer()

然後呼叫了timer的有參構造器,設定執行緒的名字,然後啟動執行緒

public timer(string name)

Timer和TimerTask的使用

timer可以定時執行timertask任務,使用起來也十分的方便。以下的 是輸出當前時間的timertask 輸出當前時間的任務 private static timertask task new timertask 以下 是使用timer執行timertask timer定時執行timertas...

Timer和TimerTask定時器使用

timer是一種定時器工具,用來在乙個後台執行緒計畫執行指定任務。它可以計畫執行乙個任務一次或反覆多次。timertask乙個抽象類,它的子類代表乙個可以被timer計畫的任務。具體的任務在timertask中run介面中實現。通過timer中的schedule方法啟動定時任務。一 執行定時器 啟動...

spring中整合TimerTask執行定時任務

spring整合了定時器,timertask。由scheduledtimertask和time ctorybean類組成的。scheduledtimertask類是對timertask的包裝器實現,我們自定義觸發器。time ctorybean,使spring配置建立觸發器。org.springfr...