1 使用背景:
在nea的开发过程中,性能数据上报时候,需要在接受数据的时候,定时给RNC网元发送ACK消息(网管在收到数据帧后的T时间内必须回送确认给网元。该功能是确保在发送给网管的数据帧不足V个的情况下,网元仍然能够收到确认。)
所以需要在定时器未启动的情况下,接受到数据后启动定时器,然后在定时器到时的情况下发送ACK,停止定时器。
在java的util包中提供了定时器的类Timer TimerTask 等。
Timer
Timer() |
Timer(boolean isDaemon) |
Timer(String name, boolean isDaemon) |
void | cancel() |
in t | purge() |
void | |
void | schedule(TimerTask task, Date firstTime, long period) |
void | |
void | schedule(TimerTask task, long delay, long period) |
void | scheduleAtFixedRate(TimerTask task, Date firstTime, long period) |
void | scheduleAtFixedRate(TimerTask task, long delay, long period) |
TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。
boolean | cancel() 取消此计时器任务。 |
abstract void | run() 此计时器任务要执行的操作。 |
package nea.timer;
import java.util.Timer;
import java.util.TimerTask;
/**
* 定时器,执行定时任务
* @author liuyuan
* @version 0.1
*/
public class TimerFactory {
private Timer time = null;
private static TimerFactory factory = null;
private TimerTask task = null;
public TimerFactory(){
time = new Timer();
}
public static TimerFactory get In stance() {
if (null == factory) {
factory = new TimerFactory();
return factory;
} else {
return factory;
}
}
/**
* 启动定时器,每隔period时间执行一次任务
* @param period
*/
public synchronized void start(long period, in t count,TimerTask task) {
this.task = (TimerTask)task;
time.schedule(task,0,period);
}
/**
* 复位计时器
*
*/
public synchronized void stop() {
/* 取消任务 */
task.cancel();
/* 清空任务队列 */
time.purge();
task = null;
}
}
这段代码中start方法用来启动一个TimerTask任务,stop取消一个TimerTask任务,并清空任务队列。
具体在定时任务要每次执行什么,可以在实现TimerTask的类的run方法中定义。
具体实例:定时打印语句等。