文章目录
在看《Java并发实战》的时候,看到了Timer的例子,就想起来刚开始工作的时候有一个功能,定时的查询数据并推送且,参数大概就是sql相关参数,定时周期,定时任务的开启和关闭。用Timer简单是写个demo。
/**
* @author hqh
* @create 2021/6/23 10:18
* @description
* @mail xxx
*/
public class DynamicTimer {
//模拟数据库存储的任务参数 key:任务id,value:任务参数
public static Map<Integer,String> jobs = new HashMap(){
{
put(1,"任务一");
put(2,"任务二");
put(3,"任务三");
}
};
//key:任务id,value:timer类 管理所有正在运行中的timer
public static Map<Integer,Timer> timers=new HashMap<>();
public static void main(String[] args) throws Exception{
//每次开启定时任务都new 一个timer存在timers中
//每次关闭定时任务都保存相关数据并从timer remove
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//模拟从数据库拿出执行任务的逻辑或参数并执行,定时任务时间也可以指定
System.out.println(jobs.get(1));
}
},new Date(),5000);
//开启定时任务,放入map方便管理(停止)
timers.put(1,timer);
Thread.sleep(16000);
//结束任务
timers.get(1).cancel();
//移除timer
timers.remove(1);
}
}