posts - 17, comments - 1, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          java中的時間操作 定時任務

          Posted on 2006-09-18 20:25 HotJava 閱讀(705) 評論(0)  編輯  收藏

          關于定時任務,似乎跟時間操作的聯系并不是很大,但是前面既然提到了定時任務,索性在這里一起解決了。

          設置定時任務很簡單,用 Timer 類就搞定了。

          ?

          一、延時執行

          ?

          首先,我們定義一個類,給它取個名字叫 TimeTask ,我們的定時任務,就在這個類的 main 函數里執行。代碼如下:

          package test;

          import java.util.Timer;

          public class TimeTask {

          ?

          public static void main(String[] args){

          Timer timer = new Timer();

          timer.schedule(new Task(), 60 * 1000);

          }

          }

          ?

          解釋一下上面的代碼。

          上面的代碼實現了這樣一個功能,當 TimeTask 程序啟動以后,過一分鐘后執行某項任務。很簡單吧:先 new 一個 Timer 對象,然后調用它的 schedule 方法,這個方法有四個重載的方法,這里我們用其中一個,

          public void schedule(TimerTask?task,long?delay)

          ?

          首先,第一個參數

          ?

          第一個參數就是我們要執行的任務。

          這是一個TimerTask對象,確切點說是一個實現 TimerTask 的類的對象,因為 TimerTask 是個抽象類。上面的代碼里面, Task 就是我們自己定義的實現了 TimerTask 的類,因為是在同一個包里面,所以沒有顯性的 import 進來。 Task 類的代碼如下?

          ?

          package test;

          import java.util.TimerTask;

          public class Task extends TimerTask {

          public void run(){

          System.out.println("定時任務執行");

          }

          }

          我們的 Task 必須實現 TimerTask 的方法 run ,要執行的任務就在這個 run 方法里面,這里,我們只讓它往控制臺打一行字。

          ?

          第二個參數

          ?

          第二個參數是一個 long 型的值。這是延遲的時間,就是從程序開始以后,再過多少時間來執行定時任務。這個 long 型的值是毫秒數,所以前面我們的程序里面,過一分鐘后執行用的參數值就是 60 * 1000。

          ?

          二、循環執行

          ?

          設置定時任務的時候,往往我們需要重復的執行這樣任務,每隔一段時間執行一次,而上面的方法是只執行一次的,這樣就用到了schedule方法的是另一個重載函數

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

          ?

          前兩個參數就不用說什么了,最后一個參數就是間隔的時間,又是個 long 型的毫秒數(看來 java 里涉及到時間的,跟這個 long 是脫不了干系了),比如我們希望上面的任務從第一次執行后,每個一分鐘執行一次,第三個參數值賦60 * 1000就 ok 了。

          ?

          三、指定執行時間

          ?

          既然號稱是定時任務,我們肯定希望由我們來指定任務指定的時間,顯然上面的方法就不中用了,因為我們不知道程序什么時間開始運行,就沒辦法確定需要延時多少。沒關系,schedule四個重載的方法還沒用完呢。用下面這個就 OK 了:

          public void schedule(TimerTask?task,Date?time)

          比如,我們希望定時任務 2006 7 2 0 0 分執行,只要給第二個參數傳一個時間設置為 2006 7 2 0 0 分的 Date 對象就可以了。

          有一種情況是,可能我們的程序啟動的時候,已經是 2006 7 3 日了,這樣的話,程序一啟動,定時任務就開始執行了。

          ?

          schedule最后一個重載的方法是

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

          ?

          沒必要說什么了吧 :)

          ?

          四、 j2ee 中的定時任務

          在實際的項目中,往往定時任務需要對 web 工程中的資源進行操作,這樣一來,用上面的單個程序的方式可能就有點力不從心了,因為很多 web 工程的資源它操作不到。

          解決的辦法是,使用 Servlet ,把執行定時任務的那些代碼放到 Servlet init() 函數里就可以了,這個 easy ,就沒有必要再寫示例代碼了吧(嘿嘿,其實是作者太懶了)。?


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 锡林浩特市| 玛纳斯县| 陇西县| 鹿泉市| 苍溪县| 勃利县| 乐昌市| 抚州市| 成武县| 洪江市| 阳曲县| 贺兰县| 舞阳县| 罗源县| 寿阳县| 长顺县| 尚义县| 江安县| 景宁| 金堂县| 巴彦淖尔市| 益阳市| 临夏市| 普陀区| 临邑县| 通海县| 鹤岗市| 横峰县| 丁青县| 宕昌县| 漾濞| 乌拉特中旗| 驻马店市| 邵东县| 剑阁县| 宁德市| 沁源县| 和静县| 周口市| 武宁县| 元朗区|