欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-07 20:19:03
前言 众所周知在spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态。也可以使用cron表达式设置定时任务。 被执行...

前言

众所周知在spring 3.0版本后,自带了一个定时任务工具,而且使用简单方便,不用配置文件,可以动态改变执行状态。也可以使用cron表达式设置定时任务。

被执行的类要实现runnable接口

taskscheduler接口

taskscheduler是一个接口,taskscheduler接口下定义了6个方法

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

1、schedule(runnable task, trigger trigger);

指定一个触发器执行定时任务。可以使用crontrigger来指定cron表达式,执行定时任务

 crontrigger t = new crontrigger("0 0 10,14,16 * * ?");
 taskscheduler.schedule(this, t);

2、schedule(runnable task, date starttime);

指定一个具体时间点执行定时任务,可以动态的指定时间,开启任务。只执行一次。(比timer好用多了。早发现这接口就好了。。。)

3、scheduleatfixedrate(runnable task, long period);

立即执行,循环任务,指定一个执行周期(毫秒计时)

ps:不管上一个周期是否执行完,到时间下个周期就开始执行

4、scheduleatfixedrate(runnable task, date starttime, long period);

指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)

ps:不管上一个周期是否执行完,到时间下个周期就开始执行

5、schedulewithfixeddelay(runnable task, long delay);

立即执行,循环任务,指定一个间隔周期(毫秒计时)

ps:上一个周期执行完,等待delay时间,下个周期开始执行

6、schedulewithfixeddelay(runnable task, date starttime, long delay);

指定时间开始执行,循环任务,指定一个间隔周期(毫秒计时)

ps:上一个周期执行完,等待delay时间,下个周期开始执行

taskscheduler下有五个实现类

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

1、concurrenttaskscheduler

以当前线程执行任务。如果任务简单,可以直接使用这个类来执行。快捷方便。

ps:这是单线程运行

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接口的默认实现类,多线程定时任务执行。可以设置执行线程池数(默认一个线程)。

ps:

  1. 使用前必须得先调用initialize() 【初始化方法】
  2. shutdown()方法,执行完后可以关闭线程
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

这个没有使用到,就没具体了解,有时间再补充。有了解的欢迎来补充。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。