关于任务调度,Spring
有如下几个核心概念 :
Task
– 任务- 用于表示一个有待执行的任务;
- 该任务有可能需要被执行一次;
- 在特定的时间点执行一次;
- 或者在某个时间点之后再延时特定的时间段之后执行一次;
- 也有可能需要被反复执行多次;
- 在特定时间点之后间隔特定的时间段重复执行;
- 或者在
cron
表达式指定的运行时机重复执行;
Spring
不存在针对任务对应的接口/类抽象,Spring
中一个任务具体以一个Runnable
接口实现类对象的方式存在;
TaskExecutor
– 任务执行器- 表示执行任务(
Task
)的线程或者线程池; - 并不要求一定是线程池,可以是单个线程;
- 并不要求一定是异步执行任务,也可以是同步执行任务;
Spring
存在一个接口TaskExecutor
用于抽象该任务执行器概念;Spring
提供若干个内置TaskExecutor
实现类,常见的如下 :SyncTaskExecutor
– 在调用者线程内同步执行任务;SimpleAsyncTaskExecutor
– 不重用线程,新建线程执行任务;ThreadPoolTaskExecutor
– 最常用的基于线程池的任务执行器;
- 表示执行任务(
TaskScheduler
– 任务执行调度器-
调度任务执行的工具
-
Spring
中存在接口TaskScheduler
抽象建模该概念 -
能够按以下几种方式调度任务的执行
- 在特定的时间点执行一次
ScheduledFuture schedule(Runnable task, <指定时间点>)
- 以固定频率重复执行
ScheduledFuture scheduleAtFixedRate(Runnable task, <指定时间周期>)
ScheduledFuture scheduleAtFixedRate(Runnable task, <指定在该时间点之后重复执行> ,<指定时间周期>)
- 延时执行一次
ScheduledFuture scheduleWithFixedDelay(Runnable task, <指定延时时间段>)
ScheduledFuture scheduleWithFixedDelay(Runnable task, <指定从该时间点之后开始延时> ,<指定延时时间段>)
- 使用
Trigger
任务执行触发器 – 可定制,最灵活的一种任务执行触发机制;ScheduledFuture schedule(Runnable task, Trigger trigger)
Spring
提供Trigger
接口用于建模任务触发器这一概念Spring
内置提供的Trigger
实现有 :CronTrigger
– 基于cron
表达式的任务执行触发器PeriodicTrigger
– 创建延时执行一次或者固定周期执行多次的任务触发器
- 在特定的时间点执行一次
-
ScheduledFuture
– 被调度了的任务执行Spring
使用ScheduledFuture
接口抽象表示概念"被调度了的任务",该任务会在将来某个时刻被执行;Spring
通过ScheduledFuture
接口可以取消调度了的任务或者检查该任务执行是否已经完成;
-
参考资料
-