1.0使用思路。
自定义自身执行类继承TimerTask,添加所需参数于其中,在run方法中调用所需参数;
配置静态map集合(或hashTable)两个,一个用于记录定时时间,一个用于存放定时任务Timer;
绑定具有唯一性的id,使用场景中是具有唯一性的参数,例如教室id,根据需求是否要取消指定定时任务,若需要通过id来获取所取得的定时任务,执行取消命令;
2.0 执行容器类
package demo.task;
import com.alibaba.fastjson.JSONObject;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
/**
* 根据需求建立需要的参数,赋值到容器中;
*/
private JSONObject param;
private String numId;
@Override
public void run() {
/**
* 执行定时任务内容
*/
executeTimer(numId,param);
}
/**
* 调用所需执行内容
*/
private void executeTimer(String numId, JSONObject param) {
//TODO 执行要执行的代码 方法...
System.out.println("定时任务执行");
}
public JSONObject getParam() {
return param;
}
public void setParam(JSONObject param) {
this.param = param;
}
public String getNumId() {
return numId;
}
public void setNumId(String numId) {
this.numId = numId;
}
}
3.0定时任务工具类
package demo.util;
import java.util.Hashtable;
import java.util.Timer;
public class TimerUtil {
private Hashtable<String, Timer> timerHt= new Hashtable<>();
private Hashtable<String, Long> delayTimeHt= new Hashtable<>();
private static TimerUtil instance;
public static synchronized TimerUtil getInstance() {
if (instance==null){
synchronized (TimerUtil.class){
if (instance == null) {
instance = new TimerUtil();
}
return instance;
}
}else {
return instance;
}
}
private TimerUtil(){
}
public Hashtable<String, Timer> getTimerHt() {
return timerHt;
}
public void setTimerHt(String numID ,Timer timer) {
this.timerHt.put(numID,timer);
}
public Hashtable<String, Long> getDelayTimeHt() {
return delayTimeHt;
}
public void setDelayTimeHt(String numID , Long delayTime) {
this.delayTimeHt.put(numID,delayTime);
}
}
4.0 执行定时任务取消指定定时任务
package demo.control;
import com.alibaba.fastjson.JSONObject;
import demo.task.MyTimerTask;
import demo.util.TimerUtil;
import java.util.Hashtable;
import java.util.Timer;
public class DoAction {
public static void main(String[] args) {
TimerUtil util = TimerUtil.getInstance();
Hashtable<String, Long> delayTimeHt = util.getDelayTimeHt();
Hashtable<String, Timer> timerHt = util.getTimerHt();
String id="10001";
//执行定时任务;
Timer timer= new Timer();
MyTimerTask task= new MyTimerTask();
task.setNumId(id);
task.setParam(new JSONObject());
timer.schedule(task,10*60*1000);
delayTimeHt.put(id, System.currentTimeMillis()+10*60*1000-100);
timerHt.put(id,timer);
//更具需求判断是否需要取消定时任务
if(delayTimeHt.get(id)<=System.currentTimeMillis()){
Timer oldTimer = timerHt.get(id);
if (oldTimer!=null){
oldTimer.cancel();
}
}
}
}