这里写目录标题
任务调度需求分析
任务调度的实现方式有很多,如果要实现我们的调度需求,我们对这个工具有什么样的基本要求呢?
基本需求
1.可以定义触发的规则,比如基于时刻、时间间隔、表达式。
2.可以定义需要执行的任务。比如执行一个脚本或者一段代码。任务和规则是分开的。
3.集中管理配置,持久配置。不用把规则写在代码里面,可以看到所有的任务配置,方便维护。重启之后任务可以再次调度——配置文件或者配置中心。
4.支持任务的串行执行,例如执行 A 任务后再执行 B 任务再执行 C 任务。
5.支持多个任务并发执行,互不干扰(例如 ScheduledThreadPoolExecutor)。
6.有自己的调度器,可以启动、中断、停止任务。
7.容易集成到 Spring。
任务调度工具对比
Timer
单线程执行
import java.util.Timer;
import java.util.TimerTask;
public class TestTimerTask extends TimerTask {
/**
* 此计时器任务要执行的操作。
*/
public void run() {
Date executeTime = new Date(this.scheduledExecutionTime());
String dateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println("任务执行了:" + dateStr);
}
}
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schedule(task, 5000L, 1000L);