源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

spring中定时任务taskScheduler的详细介绍

  • 时间:2021-03-22 22:08 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:spring中定时任务taskScheduler的详细介绍
[b]前言[/b] 众所周知在spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态。也可以使用cron表达式设置定时任务。 [b]被执行的类要实现Runnable接口[/b] [b]TaskScheduler接口[/b] TaskScheduler是一个接口,TaskScheduler接口下定义了6个方法 [img]http://files.jb51.net/file_images/article/201702/2017213111550164.png?2017113111559[/img] 1、[code]schedule(Runnable task, Trigger trigger);[/code] 指定一个触发器执行定时任务。可以使用CronTrigger来指定Cron表达式,执行定时任务
 CronTrigger t = new CronTrigger("0 0 10,14,16 * * ?");
 taskScheduler.schedule(this, t);
2、[code]schedule(Runnable task, Date startTime);[/code] 指定一个具体时间点执行定时任务,可以动态的指定时间,开启任务。只执行一次。(比Timer好用多了。早发现这接口就好了。。。) 3、[code]scheduleAtFixedRate(Runnable task, long period);[/code] 立即执行,循环任务,指定一个执行周期(毫秒计时) [b]PS:[/b]不管上一个周期是否执行完,到时间下个周期就开始执行 4、[code]scheduleAtFixedRate(Runnable task, Date startTime, long period);[/code] 指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时) [b]PS:[/b]不管上一个周期是否执行完,到时间下个周期就开始执行 5、[code]scheduleWithFixedDelay(Runnable task, long delay);[/code] 立即执行,循环任务,指定一个间隔周期(毫秒计时) [b]PS:[/b]上一个周期执行完,等待delay时间,下个周期开始执行 6、[code]scheduleWithFixedDelay(Runnable task, Date startTime, long delay);[/code] 指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时) [b]PS:[/b]上一个周期执行完,等待delay时间,下个周期开始执行 [b]TaskScheduler下有五个实现类[/b] [img]http://files.jb51.net/file_images/article/201702/2017213111710533.png?2017113111717[/img] 1、ConcurrentTaskScheduler 以当前线程执行任务。如果任务简单,可以直接使用这个类来执行。快捷方便。 [b]PS:[/b]这是单线程运行
public class LocTest implements Runnable {
 private ConcurrentTaskScheduler tpts = new ConcurrentTaskScheduler();
 private void start() {
tpts.schedule(this, new Date());
 }
 public void run() {
Thread ct = Thread.currentThread();
System.out.println("current id:"+ct.getId());
System.out.println("current name:"+ct.getName());
 }
 public static void main(String[] args) {
new LocTest().start();
 }
}
2、DefaultManagedTaskScheduler 以当前线程执行任务,这是ConcurrentTaskScheduler的子类,添加了JNDI的支持。和ConcurrentTaskScheduler一样的用法,需要使用JNDI可以单独设置 3、ThreadPoolTaskScheduler TaskScheduler接口的默认实现类,多线程定时任务执行。可以设置执行线程池数(默认一个线程)。 [b]PS:[/b] [list=1] [*]使用前必须得先调用[code]initialize()[/code] 【初始化方法】 [/*] [*]有[code]shutDown()[/code]方法,执行完后可以关闭线程[/*] [/list]
public class LocTest implements Runnable {
private ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
private void start() {
taskScheduler.setPoolSize(10);
//必须得先初始化,才能使用
taskScheduler.initialize();
taskScheduler.schedule(this, new Date());
}
public void run() {
Thread ct = Thread.currentThread();
System.out.println("current id:"+ct.getId());
System.out.println("current name:"+ct.getName());
}
public static void main(String[] args) {
new LocTest().start();
}
}
4、TimerManagerTaskScheduler 这个没有使用到,就没具体了解,有时间再补充。有了解的欢迎来补充。 [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部