每天凌晨跑报表、每隔 5 分钟扫描超时订单、每周一发周报邮件——定时任务无处不在。但同样是"定时执行",用 Timer 和用 XXL-JOB 之间的差距,就像用闹钟和用智能日程管理系统的差距。这篇文章带你从最原始的方案走到最成熟的方案,彻底搞懂定时任务。
一、Java 原生方案
1.1 Timer:最简单但最脆弱
Timer 是 JDK 自带的定时调度器,核心就两个东西:
- TaskQueue:按执行时间排序的任务队列(小顶堆)
- TimerThread:一个后台线程,不断从队列中取最早的任务执行
大约 18 分钟