自己定義定時器(Timer)
阿新 • • 發佈:2017-06-02
mil 動態 初始化 span 標誌位 定時器 ace ram run
以下是為此線程提供的控制類:
也在不斷完好中。如有發現bug,請一定給出評論!
近期做項目的時候,用到了java.util.Timer定時器類。也初步使用了,個人感覺不錯。只是,在某些方面Timer類無法滿足項目的需求。比方,在使用Timer時,調用schedule()方法之後(初始化),其循環周期無法改變,僅僅有調用cancel()方法之後再又一次啟動才幹將循環周期改變。 自己自己定義了一個定時器線程,可開啟、可關閉、可動態的改變循環周期。詳細代碼例如以下:
/** * @ClassName: MyTimer * @Description: TODO 自己定義定時器類 * @author yc * @date 2014年10月16日 下午10:42:04 */ package com.keymantek.demo; public class MyTimer extends Thread{ //開關控制標誌位 public static boolean flag = false; //開始時間 //delay in milliseconds before task is to be executed. public static Long startTime = 1000*3*60L; //循環時間 //time in milliseconds between successive task executions. public static Long period = 1000*5*60L; @Override public void run() { while(true) { try { //開始時間 Thread.sleep(startTime); //僅僅有當flag為true時,才採集相關信息 while(flag) { //業務邏輯處理塊 //循環時間 Thread.sleep(period); } //當flag為false時,線程歇息中 Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } } }
/** * @ClassName: TimerReadElectricityMeterTable * @Description: TODO 自己定義定時器線程控制類 * @author yc * @date 2014年10月16日 下午10:41:29 */ package com.keymantek.demo; public class MyTimerController { /** * @category 初始化自己定義定時線程 */ public static void initMyTimer() { MyTimer timer= new MyTimer(); timer.start(); System.out.println("初始化自己定義定時線程"); } /** * @category 開啟自己定義定時線程 * @param period 循環時間 */ public static void startMyTimer(Long period) { MyTimer.flag = true; MyTimer.period = period; System.out.println("開啟自己定義定時線程"); } /** * @category 停止自己定義定時線程 */ public static void stopMyTimer() { MyTimer.flag = false; System.out.println("停止自己定義定時線程"); } }
也在不斷完好中。如有發現bug,請一定給出評論!
自己定義定時器(Timer)