JDK Timer定時器的應用【轉摘】

          作者:熔 巖
          研究了Quartz企業級定時器后,感覺功能太強大了,如果要執行一些簡單的定時器任務,無須做復雜的控制,也無須保存狀態,那么可以考慮使用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
                  ......
           

          posted on 2009-09-18 23:26 張平輝 閱讀(196) 評論(1)  編輯  收藏

          評論

          # re: JDK Timer定時器的應用【轉摘】 2011-10-11 09:15 廣福的老王

          謝謝分享!  回復  更多評論   


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


          網站導航:
           
          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          留言簿

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 共和县| 都安| 五常市| 海宁市| 徐州市| 阿勒泰市| 阳春市| 晋城| 彩票| 建阳市| 濮阳市| 兴隆县| 高淳县| 普兰店市| 石门县| 青川县| 万山特区| 曲水县| 岑巩县| 洪雅县| 泽普县| 太保市| 南投市| 那坡县| 会同县| 元氏县| 富蕴县| 平果县| 都昌县| 香港 | 乌兰察布市| 健康| 绥阳县| 泗洪县| 紫阳县| 江都市| 汉阴县| 忻州市| 夏邑县| 神木县| 大同县|