自訂定時器(Timer),自訂定時器timer
最近做項目的時候,用到了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;@Overridepublic 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的控制項
我正好寫了個逾時計時的定時器,代碼貼上去看看吧。
/// <summary>
/// 用於逾時計數的定時器
/// </summary>
public abstract class Timer:BaseClass
{
public Timer()
{
TickTimer.OnTimerEvent += new NoParamHandler(TickTimer_OnTimerEvent);
TickTimer.ScanEvent += new NoParamHandler(TickTimer_ScanEvent);
}
/// <summary>
/// 每隔100秒執行一次的掃描事件
/// </summary>
public virtual void TickTimer_ScanEvent()
{
;
}
private bool enabled = false;
/// <summary>
/// 定時器是否工作
/// </summary>
public bool Enabled
{
get { return enabled; }
set { enabled = value; }
}
private bool isSelfOutTime= false;
/// <summary>
/// 是否使用自訂逾時時間
/// </summary>
public bool IsSelfOutTime
{
get { return isSelfOutTime; }
set { isSelfOutTime = value; }
}
private int outTime;
/// <summary>
/// 逾時時間
/// </summary>
public int OutTime
{
get { return outTime; }
set { outTime = value; }
}
private DateTime startTime;
/// <summ......餘下全文>>
VB 中定時器timer
會的,
Timer2.Enabled = False的意思是不會再次出發Timer2的Timer事件。
但是這個sub是會執行完的。