![596b39dc182a08d066fa03112daa28ad.png](https://i-blog.csdnimg.cn/blog_migrate/d29e6763f63e9c1a09a6020c6a1d96ec.jpeg)
说到任务调度,大家可能会想到Quartz框架,但是jdk自带的简单任务调度工具类,反而了解的人并不是很多。我觉得如果你的业务相对简单的话,没必要非得用Quartz等框架,使用Timer完全可以胜任的。简单来分享一下我了解的Timer。
Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。
一、Timer 使用
Timer 调度任务有一次性调度和循环调度,循环调度有分为固定速率调度(fixRate)和固定时延调度(fixDelay)。固定速率强调准点,固定时延强调间隔。
如果你有一个任务必须每天准点调度,那就应该使用固定速率调度,并且要确保每个任务执行时间不要太长,千万别超过了第二天这个点。如果你有一个任务需要每隔几分钟跑一次,那就使用固定时延调度,它不是很在乎你的单个任务要跑多长时间。
常用方法
//0表示立即执行一次,以后每隔一段时间执行一次
timer.schedule(task, 0, PERIOD);
timer.schedule(task, bookTime(10,45,0), 10000)
//1000表示1秒后执行一次,以后每隔一段时间执行一次
timer.schedule(task, 1000, PERIOD);
//0表示立即执行一次,以后每隔一段时间执行一次
timer.schedule(task, 1000, PERIOD);
// 在当天14点4分整,执行一次,以后不再执行
timer.schedule(task, bookTime(15,0,0));
//在当天10点34分整,执行一次,以后每隔一段时间执行一次
//如果时间超过了设定时间,会立即执行一次
timer.schedule(task, bookTime(0,34,10),PERIOD);
timer.scheduleAtFixedRate(task, bookTime(0,40,0),PERIOD);
代码示例
我是用TimerTask来创建一个任务,其中run方法里是任务调度的逻辑。使用一个Timer对象来调度任务。
TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。
public class TaskManager {