posts - 297,  comments - 1618,  trackbacks - 0
          以前用JDK的Timer實(shí)現(xiàn)過定時(shí)同步用戶數(shù)據(jù),今日看到Timer相關(guān)的一個(gè)例子,實(shí)現(xiàn)每隔10分鐘檢測(cè)一次用戶是否有新郵件抵達(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類并不支持每天每段時(shí)間的調(diào)度,因此代碼中使用Calendar類獲取當(dāng)前時(shí)間,比較當(dāng)前時(shí)間與系統(tǒng)需要調(diào)度的時(shí)間段。

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

          ??? 本應(yīng)用的計(jì)時(shí)器隨應(yīng)用的啟動(dòng)而啟動(dòng),一次可以設(shè)計(jì)成load-on-startup的servlet,也可以設(shè)計(jì)成listener,一般設(shè)計(jì)成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ì)時(shí)器已經(jīng)啟動(dòng)");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????計(jì)時(shí)器已經(jīng)啟動(dòng)");
          ????????timer.schedule(
          new?MyTask()?,?0?,?2*60*1000);//每4分鐘執(zhí)行一次?
          ????????sce.getServletContext().log(new?java.util.Date()?+?"計(jì)時(shí)器執(zhí)行一次!!!!!");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????????計(jì)時(shí)器執(zhí)行一次!!!!!");
          ????}
          ?
          ????
          ????
          public?void?contextDestroyed(ServletContextEvent?sce)
          ????
          {?
          ????????timer.cancel();?
          ????????sce.getServletContext().log(
          new?java.util.Date()?+?"計(jì)時(shí)器被銷毀!!!");?
          ????????System.out.println(
          new?java.util.Date()?+?"??????????計(jì)時(shí)器被銷毀!!!");
          ????}
          ?
          }
          ?

          三.在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)用啟動(dòng)后,該listener隨著啟動(dòng),負(fù)責(zé)加載Timer實(shí)例。
          posted on 2007-02-11 23:35 阿蜜果 閱讀(1452) 評(píng)論(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)

          隨筆分類

          隨筆檔案

          文章分類

          相冊(cè)

          關(guān)注blog

          積分與排名

          • 積分 - 2296321
          • 排名 - 3

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 沂源县| 安陆市| 赤水市| 巴彦县| 玛曲县| 长丰县| 台东市| 霍林郭勒市| 潮安县| 新营市| 吉林市| 石楼县| 肇东市| 湖北省| 瑞金市| 龙州县| 元江| 鄱阳县| 嘉兴市| 阿坝| 惠州市| 鸡东县| 治县。| 大竹县| 德阳市| 高碑店市| 镇雄县| 白城市| 沾益县| 宣武区| 金川县| 平泉县| 武鸣县| 宁武县| 犍为县| 伊宁县| 白河县| 卓资县| 锡林郭勒盟| 勐海县| 普格县|