← 返回题目列表

定时任务上一轮没执行完,下一轮又触发了怎么办?

高频 中等 第 3 / 25 题 更新于 2026/07/28
阻塞策略并发执行串行任务

简化版

上一轮任务没执行完又触发下一轮时,需要根据业务选择阻塞策略:串行等待、丢弃后续、覆盖旧任务、并发执行或终止旧任务。核心判断是任务是否允许并发、是否有顺序要求、重复执行是否安全。

详细版

常见处理策略:

策略含义适用场景
串行等待下一轮排队等上一轮完成有顺序要求的任务
丢弃后续上一轮运行中则跳过本轮高频刷新、可丢任务
并发执行多轮同时跑分片独立、无共享资源
覆盖旧任务新任务替代旧任务只关心最新状态
终止旧任务杀掉旧任务跑新任务少用,需任务可安全中断

面试中要强调:默认不要让同一任务无限并发,否则可能造成数据重复、锁冲突、数据库压力暴涨。任务要设置超时、执行状态和告警。

完整版教学

一、为什么会出现任务重叠

任务重叠通常发生在任务周期短、执行时间不稳定的场景。

比如任务每 5 分钟执行一次,但某次因为数据库慢查询跑了 12 分钟:

00:00 第一轮开始
00:05 第二轮触发
00:10 第三轮触发
00:12 第一轮结束

如果不控制,第二轮和第三轮可能同时执行,造成重复处理和资源竞争。

二、串行等待适合什么场景

串行等待适合有顺序要求的任务。例如按时间推进的数据同步任务,必须先同步 10:00 前的数据,再同步 10:05 前的数据。

串行的好处是顺序清楚,不容易并发冲突。缺点是如果任务一直变慢,队列会越积越多,延迟越来越大。

所以串行任务要配合超时和积压告警。如果任务周期是 5 分钟,但平均执行 20 分钟,真正应该做的是优化任务或调整周期,而不是让它一直排队。

三、丢弃后续适合什么场景

丢弃后续适合只需要周期性刷新、不要求每轮都执行的任务。

例如每分钟刷新一次热点商品缓存。如果上一轮还没刷新完,本轮可以跳过,因为继续并发刷新意义不大,还会加重压力。

这种策略要确认跳过不会造成业务缺口。对账、账单、资金类任务通常不能随便丢弃。

四、并发执行为什么危险

并发执行只有在任务之间完全独立时才安全。

危险点包括:

  1. 两轮任务处理同一批数据,造成重复写。
  2. 多个任务同时扫大表,数据库压力上升。
  3. 同一外部接口被并发调用,触发限流。
  4. 共享临时文件或缓存 Key 被覆盖。

如果必须并发,需要按分片、业务范围、任务参数隔离,并保证幂等。

五、终止旧任务为什么要谨慎

终止旧任务看起来干净,但很多任务不是可安全中断的。

例如任务已经发放了部分奖励,强行中断后如果没有进度记录和补偿机制,下一轮不知道从哪里继续。更糟糕的是,外部接口调用可能已经成功,本地还没记录。

所以终止策略只适合明确支持中断和恢复的任务。否则更推荐让旧任务完成,或者通过状态标记让它自己安全退出。

六、常见误区与追问

这道题要紧扣「任务阻塞策略」本身回答,不能把它混成泛泛的分布式任务调度套话。面试官通常会沿着“为什么需要、流程怎么走、失败怎么兜、代价是什么”继续追问,所以回答要覆盖调度触发、分片分配、抢占锁、失败重试、超时控制、幂等和高可用。

回答层次要讲清的内容容易漏掉的边界
核心结论阻塞策略决定上一次任务未完成时下一次触发如何处理,常见丢弃、并行、覆盖或排队不要停在名词解释
流程机制到达调度时间 -> 检查上次执行状态 -> 按策略丢弃/并行/排队 -> 记录触发结果 -> 执行或跳过任务 -> 监控积压和耗时要说清触发点、状态变化、确认点和失败兜底
工程取舍任务每 1 分钟触发一次但执行 3 分钟,如果不设策略,可能并发堆出多个相同任务任务调度提升自动化和吞吐,但必须处理重复执行、漏执行、积压、超时和故障恢复
任务阻塞策略 面试拆解:
1. 到达调度时间
2. 检查上次执行状态
3. 按策略丢弃/并行/排队
4. 记录触发结果
5. 执行或跳过任务
6. 监控积压和耗时

记忆钩子:先给结论,再拆流程,再讲数字例子和失败边界;回答「任务阻塞策略」时要围绕题目问法收束,不要把相邻概念堆成一段没有重点的名词清单。

  • 误区:任务触发越准时越好。 如果上次未完成,强行准时并发可能造成重复写和资源打满。
  • 误区:所有任务都适合并行执行。 有状态写任务并行可能破坏顺序或重复处理。
  • 误区:丢弃后不用记录。 丢弃也要有日志和指标,否则业务会以为任务正常完成。
  • 追问:慢任务怎么选阻塞策略? 可重入读任务可并行,状态写任务更适合丢弃后续或串行排队。
  • 追问:如何避免长期阻塞? 设置超时、拆分分片、优化任务和告警。
  • 追问:阻塞和 misfire 区别? 阻塞关注上次未完成,misfire 关注调度时间错过。

七、加强记忆

上一轮没跑完时,不要默认并发开跑。先判断任务能不能并发、能不能丢、有没有顺序要求;账单对账偏串行和补偿,缓存刷新可跳过或合并,大批处理要靠分片隔离和幂等兜底。