Timer 一次性定时任务的简单使用和取消

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();
			}

		}
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值