posts - 297,  comments - 1618,  trackbacks - 0
          以前用JDK的Timer實現過定時同步用戶數據,今日看到Timer相關的一個例子,實現每隔10分鐘檢測一次用戶是否有新郵件抵達,調度只在每天早上9:00到下午6:00進行。

          ??? 一. 建立任務:

          import?java.util.TimerTask;?
          import?java.util.Calendar;?

          public?class?MyTask?extends?TimerTask
          {?
          ????
          private?static?final?int?C_SCHEDULE_HOUR?=?15;?
          ????
          private?static?boolean?isRunning?=?false;?

          ????
          public?MyTask()
          ????
          {?
          ????}
          ?

          ????
          public?void?run()
          ????
          {?
          ????????Calendar?cal?
          =?Calendar.getInstance();?
          ????????
          if?(!isRunning)
          ????????
          {?
          ????????????
          //if?(C_SCHEDULE_HOUR?==?cal.get(Calendar.HOUR_OF_DAY))
          ????????????{?
          ????????????????isRunning?
          =?true;?
          ????????????????System.out.println(
          new?java.util.Date()?+?"????????任務開始");?
          ????????????????
          for?(int?i?=?0?;?i?<?100?;?i++?)
          ????????????????
          {
          ????????????????????System.out.println(
          new?java.util.Date()?+?"??????????任務完成"?+?i?+?"/"?+?100?);?
          ????????????????}
          ?
          ????????????????isRunning?
          =?false;?
          ????????????????System.out.println(
          new?java.util.Date()?+?"???????所有任務完成!");?
          ????????????}
          ?
          ????????}
          ?
          ????????
          else?
          ????????
          {?
          ????????????System.out.println(
          new?java.util.Date()?+?"?????????任務退出!!!");?
          ????????}
          ?
          ????}
          ?
          }

          注意:Timer類并不支持每天每段時間的調度,因此代碼中使用Calendar類獲取當前時間,比較當前時間與系統需要調度的時間段。

          ??? 二.? 調度任務

          ??? 本應用的計時器隨應用的啟動而啟動,一次可以設計成load-on-startup的servlet,也可以設計成listener,一般設計成listener,本例中采用該方法。

          ?? 任務調督的listener如下:

          import?java.util.TimerTask;?
          import?java.util.Timer;?
          import?javax.servlet.*;?

          public?class?ScheduleListener?implements?ServletContextListener
          {?
          ????
          private?java.util.Timer?timer?=?null;?
          ????
          ????
          public?void?contextInitialized(ServletContextEvent?sce)
          ????
          {?
          ????????timer?
          =?new?Timer(true);?
          ????????sce.getServletContext().log(
          new?java.util.Date()?+?"計時器已經啟動");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????計時器已經啟動");
          ????????timer.schedule(
          new?MyTask()?,?0?,?2*60*1000);//每4分鐘執行一次?
          ????????sce.getServletContext().log(new?java.util.Date()?+?"計時器執行一次!!!!!");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????????計時器執行一次!!!!!");
          ????}
          ?
          ????
          ????
          public?void?contextDestroyed(ServletContextEvent?sce)
          ????
          {?
          ????????timer.cancel();?
          ????????sce.getServletContext().log(
          new?java.util.Date()?+?"計時器被銷毀!!!");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????????計時器被銷毀!!!");
          ????}
          ?
          }
          ?

          三.在web.xml加載該listener,配置文件如下:
          <?xml?version="1.0"?encoding="ISO-8859-1"?>
          <!DOCTYPE?web-app
          ????PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
          ????"http://java.sun.com/dtd/web-app_2_3.dtd"
          >

          <web-app>
          ????
          <!--?此處配置listener-->
          ????
          <listener>?
          ????????
          <listener-class>ScheduleListener</listener-class>?
          ????
          </listener>?
          </web-app>
          ??? 應用啟動后,該listener隨著啟動,負責加載Timer實例。
          posted on 2007-02-11 23:35 阿蜜果 閱讀(1459) 評論(0)  編輯  收藏 所屬分類: Java
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統分析與建模實戰  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2299173
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 巩留县| 体育| 石阡县| 博爱县| 盈江县| 宜丰县| 广平县| 佳木斯市| 行唐县| 格尔木市| 苏尼特左旗| 新源县| 锡林浩特市| 两当县| 漠河县| 太谷县| 磐石市| 霍山县| 广平县| 含山县| 尉犁县| 会东县| 郯城县| 木里| 凯里市| 三门县| 竹北市| 郴州市| 甘孜| 京山县| 民勤县| 瑞昌市| 金川县| 宜兰市| 苏州市| 祁门县| 濉溪县| 乐陵市| 兴国县| 册亨县| 弥渡县|