當前位置:編程學習大全網 - 編程語言 - java 怎麽寫定時任務

java 怎麽寫定時任務

如果要執行壹些簡單的定時器任務,無須做復雜的控制,也無須保存狀態,那麽可以考慮使用JDK 入門級的定期器Timer來執行重復任務。

壹、原理

JDK中,定時器任務的執行需要兩個基本的類:

java.util.Timer;

java.util.TimerTask;

要運行壹個定時任務,最基本的步驟如下:

1、建立壹個要執行的任務TimerTask。

2、創建壹個Timer實例,通過Timer提供的schedule()方法,將 TimerTask加入到定時器Timer中,同時設置執行的規則即可。

當程序執行了Timer初始化代碼後,Timer定時任務就會按照設置去執行。

Timer中的schedule()方法是有多種重載格式的,以適應不同的情況。該方法的格式如下:

void schedule(TimerTask task, Date time)

安排在指定的時間執行指定的任務。

void schedule(TimerTask task, Date firstTime, long period)

安排指定的任務在指定的時間開始進行重復的固定延遲執行。

void schedule(TimerTask task, long delay)

安排在指定延遲後執行指定的任務。

void schedule(TimerTask task, long delay, long period)

安排指定的任務從指定的延遲後開始進行重復的固定延遲執行。

Timer是線程安全的,此類可擴展到大量同時安排的任務(存在數千個都沒有問題)。其所有構造方法都啟動計時器線程。可以調用cancel() 終止此計時器,丟棄所有當前已安排的任務。purge()從此計時器的任務隊列中移除所有已取消的任務。此類不提供實時保證:它使用 Object.wait(long) 方法來安排任務。

TimerTask是壹個抽象類,由 Timer 安排為壹次執行或重復執行的任務。它有壹個抽象方法run()----計時器任務要執行的操作。因此,每個具體的任務類都必須繼承TimerTask類,並且重寫run()方法。另外它還有兩個非抽象的方法:

boolean cancel()

取消此計時器任務。

long scheduledExecutionTime()

返回此任務最近實際 執行的安排 執行時間。

二、例子

下面用Timer實現壹個簡單例子:

package stu.timer;

import java.util.Date;

import java.util.TimerTask;

/**

* 重復執行的任務

*

* @author leizhimin,2008-10-9 9:20:20

*/

public class TestTimerTask extends TimerTask {

/**

* 此計時器任務要執行的操作。

*/

public void run() {

Date executeTime = new Date(this.scheduledExecutionTime());

System.out.println("本次任務執行的時間是" + executeTime);

}

}

package stu.timer;

import java.util.Timer;

import java.util.TimerTask;

/**

* 測試JDK Timer的執行

*

* @author leizhimin,2008-10-9 9:24:35

*/

public class TestTimer {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask task = new TestTimerTask();

timer.schedule(task, 500L, 1000L);

}

}

運行結果:

本次任務執行的時間是Thu Oct 09 09:47:57 CST 2008

本次任務執行的時間是Thu Oct 09 09:47:58 CST 2008

本次任務執行的時間是Thu Oct 09 09:47:59 CST 2008

本次任務執行的時間是Thu Oct 09 09:48:00 CST 2008

本次任務執行的時間是Thu Oct 09 09:48:01 CST 2008

本次任務執行的時間是Thu Oct 09 09:48:02 CST 2008

本次任務執行的時間是Thu Oct 09 09:48:03 CST 2008

本次任務執行的時間是Thu Oct 09 09:48:04 CST 2008

本次任務執行的時間是Thu Oct 09 09:48:05 CST 2008

......

  • 上一篇:有沒有好的輕薄本、16G內存、適合敲代碼的筆記本電腦推薦壹下
  • 下一篇:軟件工程專業難學嗎 就業方向有哪些
  • copyright 2024編程學習大全網