失效链接处理 |
任务调度系统之XXL-JOB分享 PDF下载
本站整理下载:
相关截图:
主要内容:
JAVA有哪些定时任务的框架?
在 JDK 中,内置了两个类,可以实现定时任务的功能:
timer:是一个定时器类,可以通过创建 java.util.TimerTask 调度任务,在同一个线程中串行执行,相互影响。也就是说,对于同一个 Timer 里的多个 TimerTask 任务,如果一个 TimerTask 任务在执行中,其它 TimerTask 即使到达执行的时间,也只能排队等待。因为 Timer 是串行的,所以后来 JDK 又推出了 ScheduledExecutorService ,Timer 也基本不再使用。
ScheduledExecutorService:在 JDK 1.5 新增,基于线程池设计的定时任务类,每个调度任务都会被分配到线程池中并发执行,互不影响。ScheduledExecutorService 解决了 Timer 串行的问题。缺点没有绝对的日期或者时间。
在日常开发中,我们很少直接使用 Timer 或 ScheduledExecutorService 来实现定时任务的需求。主要有几点原因:
它们仅支持按照指定频率,不直接支持指定时间的定时调度,需要我们结合 Calendar 自行计算,才能实现复杂时间的调度。例如说,每天、每周五、2019-11-11 等等。
它们是进程级别,而我们为了实现定时任务的高可用,需要部署多个进程。此时需要等多考虑,多个进程下,同一个任务在相同时刻,不能重复执行。
项目可能存在定时任务较多,需要统一的管理,此时不得不进行二次封装。所以,一般情况下,我们会选择专业的调度任务中间件。
|