目录
-
理解定时任务
定时任务基本算法
基本定时程序完善
-
完善添加任务操作
完善调度操作
哈希定时调度算法
级联时间调度算法
理解定时任务
在实际应用中,经常会碰到定时的需求场景,大概分为以下几类:
一次性的定时需求,比如未来某一时刻执行某操作,如 2020 年 11 月 11 日 0 点发送双十一活动预约结果通知;
延时一段时间执行某操作,如下单 30 分钟未付款则关闭订单等;
周期性的定时需求,比如客户端与服务器之间的活跃状态检查,每 30 秒没有“心跳”则认为链接失效;每天早上 9 点定时发送邮件通知;
自定义时间表达式,比如 crontab,这样的例子如每月 1 号,每周 5 执行,或者每月第 1 周的周 5 执行某操作。
但无论是哪一种情况,定时任务都可以分解为“计算下一次触发时间”这样的基本操作。比如每天早上 9 点发邮件这样的周期任务,假如当天时间 2020 年 11 月 3 日 9 点 0 分 0 秒,那么在执行完本次定时触发任务之后其下一次触发时间是为 2020 年 11 月 4 日 9 点 0 分 0 秒,再下一次触发时间为 2020 年 11 月 5 日 9 点 0 分 0 秒,依次类推;再比如下单后 30 分钟没有付款自动关闭订单这样的延时定时任务,假如