1. 程式人生 > >自己定義定時器(Timer)

自己定義定時器(Timer)

mil 動態 初始化 span 標誌位 定時器 ace ram run

近期做項目的時候,用到了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)