用JAVA写了一个定时器类,此类作为一个线程运行,包含了一个队列存放定时器消息,通过比较定时器的触发时间,俺触发事件先后顺序排列队列。
public class TimerTask implements Runnable {
/** *//**定时器事件队列*/
PriorityBlockingQueue<TimerSlot> queue_ = new PriorityBlockingQueue<TimerSlot>(2048);
/** *//** Creates a new instance of TimerTask */
public TimerTask() {
}
/** *//**设置定时器,并放入队列*/
public synchronized Object setTimer(String taskname, String eventname, int timerevent, int delay, Object param){
TimerSlot slot = new TimerSlot();
slot.taskname = taskname;
slot.eventname = eventname;
slot.timerevent = timerevent;
slot.expiretime = System.currentTimeMillis() + delay;
slot.param = param;
try
queue_.put(slot);
} catch (Exception ex) {
}
return 0;
}
/** *//**去掉指定的定时器*/
protected synchronized int killTimer(Object timer){
if (queue_.remove(timer)){
return 0;
}
return -1;
}
/** *//**关闭操作*/
public void close(){
queue_.clear();
}
/** *//**线程运行,检查定时器是否触发*/
public void run(){
while (true){
try{
TimerSlot slot = queue_.peek();
if (slot == null) {
Thread.sleep(50);
continue;
}
long now = System.currentTimeMillis();
if (now < slot.expiretime) {
Thread.sleep(Math.min(slot.expiretime-now,50));
continue;
}
queue_.remove();
TaskMsg taskmsg = new TaskMsg();
taskmsg.eventName=slot.eventname;
taskmsg.eventNo = slot.timerevent;
taskmsg.msg = (slot.param);
taskmsg.sender = "__timer";
taskmsg.receiver = slot.taskname;
TaskFactory.getInstance().getTaskByName(slot.taskname).
putmsgtoqueue(taskmsg);
}catch(InterruptedException e){
return;
}
}
}
class TimerSlot implements java.lang.Comparable<TimerSlot>{
public String eventname;
public String taskname;
public int timerevent;
public long expiretime; // ms, System.current+delay
public Object param;
public int compareTo(TimerSlot other) {
return (int)(this.expiretime-other.expiretime);
}
}
}
分享到:
相关推荐
JAVA定时器,只要服务开启,就能指定某些代码在某个时刻执行,例如:监狱里罪犯的余刑天数,每天都要减少,就可以设置一个定时器在每天的23:59:59来执行减少余刑天数的天。
JAVA定时器JAVA定时器.pdf
java定时器
实例助解java定时器设置及停止的方法
java 定时器(Timer) java 定时器(Timer) java 定时器(Timer)
Java定时器的使用 Java程序 Java写的一个定时器
java定时器,import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; 规定每天几点执行一次
讲解Java定时器开发
Java定时器简例
Java后台定时器代码Java后台定时器代码Java后台定时器代码Java后台定时器代码Java后台定时器代码
java定时器,timer类操作详解 java定时器,timer类操作详解
java定时器 spring定时器:包括spring定时器的详细配置以及说明 包含所需的jar包
在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。
Java定时器.pdf
java web 定时器例子
java定时器例子,使用 java.util.TimerTask 类来实现定时执行
有助于你快速的查找您要使用的类对象及其方法。
比较全面的定时器,里面有例子,照着例子就可以学会spring和java定时器。
java定时器说明与应用