自訂定時器(Timer),自訂定時器timer

來源:互聯網
上載者:User

自訂定時器(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是會執行完的。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.