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

          ??? 一. 建立任務(wù):

          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()?+?"????????任務(wù)開始");?
          ????????????????
          for?(int?i?=?0?;?i?<?100?;?i++?)
          ????????????????
          {
          ????????????????????System.out.println(
          new?java.util.Date()?+?"??????????任務(wù)完成"?+?i?+?"/"?+?100?);?
          ????????????????}
          ?
          ????????????????isRunning?
          =?false;?
          ????????????????System.out.println(
          new?java.util.Date()?+?"???????所有任務(wù)完成!");?
          ????????????}
          ?
          ????????}
          ?
          ????????
          else?
          ????????
          {?
          ????????????System.out.println(
          new?java.util.Date()?+?"?????????任務(wù)退出!!!");?
          ????????}
          ?
          ????}
          ?
          }

          注意:Timer類并不支持每天每段時間的調(diào)度,因此代碼中使用Calendar類獲取當(dāng)前時間,比較當(dāng)前時間與系統(tǒng)需要調(diào)度的時間段。

          ??? 二.? 調(diào)度任務(wù)

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

          ?? 任務(wù)調(diào)督的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()?+?"計時器已經(jīng)啟動");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????計時器已經(jīng)啟動");
          ????????timer.schedule(
          new?MyTask()?,?0?,?2*60*1000);//每4分鐘執(zhí)行一次?
          ????????sce.getServletContext().log(new?java.util.Date()?+?"計時器執(zhí)行一次!!!!!");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????????計時器執(zhí)行一次!!!!!");
          ????}
          ?
          ????
          ????
          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>
          ??? 應(yīng)用啟動后,該listener隨著啟動,負(fù)責(zé)加載Timer實(shí)例。
          posted on 2007-02-11 23:35 阿蜜果 閱讀(1452) 評論(0)  編輯  收藏 所屬分類: Java
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

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

                Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關(guān)注blog

          積分與排名

          • 積分 - 2296388
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 关岭| 兰州市| 鄂伦春自治旗| 平顶山市| 龙州县| 盖州市| 红河县| 九台市| 白沙| 永靖县| 焦作市| 正阳县| 英山县| 上杭县| 吉水县| 闵行区| 彰武县| 林芝县| 青川县| 甘肃省| 广水市| 宝应县| 调兵山市| 瓦房店市| 宕昌县| 平舆县| SHOW| 邹城市| 义乌市| 尼勒克县| 浦北县| 称多县| 容城县| 全州县| 黔西| 永清县| 瑞昌市| 高密市| 宜春市| 肇州县| 溧阳市|