基于环形队列的超时触发算法只需要一个timer即可实现批量超时任务的触发,CPU消耗低,效率高。原理介绍,下面是此算法的简单实现。
1,TaskHolder.javapackage com.zws.timer;
/**
*
* @author wensh.zhu
* @date 2018-04-22
*/
public class TaskHolder {
/** 任务所需等待的圈数,即任务需要走几圈**/
private int cycles;
private int delays;
private Runnable task;
public TaskHolder() {}
public TaskHolder(int cycles, int delays, Runnable task) {
this.cycles = cycles;
this.delays = delays;
this.task = task;
}
public boolean isTimeOut() {
return cycles <= 0;
}
public void cutDown() {
cycles --;
}
public int getCycles() {
return cycles;
}
public void setCycles(int cycles) {
this.cycles = cycles;
}
public int getDelays() {
return delays;
}
public void setDelays(int delays) {
this.delays = delays;
}
public Runnable getTask() {
return task;
}
public void setTask(Runnable task) {
this.task = task;
}
@Override
public String toString() {
return "TaskHolder[cycles=" + cycles + ", delays=" + delays + "]"