JDK Timer定時(shí)器的應(yīng)用【轉(zhuǎn)摘】

          作者:熔 巖
          研究了Quartz企業(yè)級(jí)定時(shí)器后,感覺(jué)功能太強(qiáng)大了,如果要執(zhí)行一些簡(jiǎn)單的定時(shí)器任務(wù),無(wú)須做復(fù)雜的控制,也無(wú)須保存狀態(tài),那么可以考慮使用JDK 入門級(jí)的定期器Timer來(lái)執(zhí)行重復(fù)任務(wù)。
           
          一、原理
          JDK中,定時(shí)器任務(wù)的執(zhí)行需要兩個(gè)基本的類:
              java.util.Timer;
              java.util.TimerTask;
          要運(yùn)行一個(gè)定時(shí)任務(wù),最基本的步驟如下:
          1、建立一個(gè)要執(zhí)行的任務(wù)TimerTask。
          2、創(chuàng)建一個(gè)Timer實(shí)例,通過(guò)Timer提供的schedule()方法,將TimerTask加入到定時(shí)器Timer中,同時(shí)設(shè)置執(zhí)行的規(guī)則即可。
          當(dāng)程序執(zhí)行了Timer初始化代碼后,Timer定時(shí)任務(wù)就會(huì)按照設(shè)置去執(zhí)行。
          Timer中的schedule()方法是有多種重載格式的,以適應(yīng)不同的情況。該方法的格式如下:
           void schedule(TimerTask task, Date time)
                    安排在指定的時(shí)間執(zhí)行指定的任務(wù)。
           void schedule(TimerTask task, Date firstTime, long period)
                    安排指定的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。
           void schedule(TimerTask task, long delay)
                    安排在指定延遲后執(zhí)行指定的任務(wù)。
           void schedule(TimerTask task, long delay, long period)
                    安排指定的任務(wù)從指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。
          Timer是線程安全的,此類可擴(kuò)展到大量同時(shí)安排的任務(wù)(存在數(shù)千個(gè)都沒(méi)有問(wèn)題)。其所有構(gòu)造方法都啟動(dòng)計(jì)時(shí)器線程。可以調(diào)用cancel() 終止此計(jì)時(shí)器,丟棄所有當(dāng)前已安排的任務(wù)。purge()從此計(jì)時(shí)器的任務(wù)隊(duì)列中移除所有已取消的任務(wù)。此類不提供實(shí)時(shí)保證:它使用 Object.wait(long) 方法來(lái)安排任務(wù)。
          TimerTask是一個(gè)抽象類,由 Timer 安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。它有一個(gè)抽象方法run()----計(jì)時(shí)器任務(wù)要執(zhí)行的操作。因此,每個(gè)具體的任務(wù)類都必須繼承TimerTask類,并且重寫(xiě)run()方法。另外它還有兩個(gè)非抽象的方法:
           boolean cancel()
                    取消此計(jì)時(shí)器任務(wù)。
           long scheduledExecutionTime()
                    返回此任務(wù)最近實(shí)際 執(zhí)行的安排 執(zhí)行時(shí)間。
          二、例子
          下面用Timer實(shí)現(xiàn)一個(gè)簡(jiǎn)單例子:
          package stu.timer;

          import java.util.Date;
          import java.util.TimerTask;

          /**
          * 重復(fù)執(zhí)行的任務(wù)
          *
          * @author leizhimin,2008-10-9 9:20:20
          */

          public class TestTimerTask extends TimerTask {
                  /**
                   * 此計(jì)時(shí)器任務(wù)要執(zhí)行的操作。
                   */

                  public void run() {
                          Date executeTime = new Date(this.scheduledExecutionTime());
                          System.out.println("本次任務(wù)執(zhí)行的時(shí)間是" + executeTime);
                  }
          }
          package stu.timer;

          import java.util.Timer;
          import java.util.TimerTask;

          /**
          * 測(cè)試JDK Timer的執(zhí)行
          *
          * @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);
                  }
          }
           
          運(yùn)行結(jié)果:
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:47:57 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:47:58 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:47:59 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:48:00 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:48:01 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:48:02 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:48:03 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:48:04 CST 2008
          本次任務(wù)執(zhí)行的時(shí)間是Thu Oct 09 09:48:05 CST 2008
                  ......
           

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

          評(píng)論

          # re: JDK Timer定時(shí)器的應(yīng)用【轉(zhuǎn)摘】 2011-10-11 09:15 廣福的老王

          謝謝分享!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          留言簿

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          主站蜘蛛池模板: 襄樊市| 齐齐哈尔市| 马龙县| 乌拉特后旗| 通许县| 垣曲县| 石屏县| 台南县| 恩施市| 老河口市| 东兴市| 来宾市| 定安县| 碌曲县| 威信县| 恩平市| 民权县| 嘉定区| 内丘县| 彭山县| 新建县| 望都县| 杂多县| 鱼台县| 龙江县| 叶城县| 自治县| 唐海县| 江津市| 沁水县| 光山县| 仁布县| 诏安县| 云阳县| 洱源县| 台东县| 伊通| 庄浪县| 抚宁县| 外汇| 高尔夫|