-
2021-02-26 16:12:36
第一 schedule 方法 三个参数 按照顺序 (执行的任务方法,开始执行时间,多少时间后循环去执行) 代码可用
public class TestScheedule {
public static void mutilmethod() throws InterruptedException {
Date date=new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("这是一个定时循环执行的方法"+dateFormat.format(date));
Thread.sleep(1000);
}
public static void main(String[] args) throws Exception {
final SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = dateFormatter.parse("2019-2-28 9:41:00");
Timer timer = new Timer();
//三个 参数
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
mutilmethod();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 0,5000);//0ms后立刻执行 2000ms后循环执行这个方法
}
}
第二种方式
scheduleAtFixedRate方法
public class TestScheduleAtFixed {
public static void mutilmethod() throws InterruptedException {
Date date=new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("这是一个定时循环执行的方法"+dateFormat.format(date));
Thread.sleep(2000);
}
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = dateFormatter.parse("2019-2-28 10:24:50");
Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
mutilmethod();
} catch (Exception e) {
e.printStackTrace();
}
}
},startDate,1000);
}
}
总结 当 一个方法执行时间超过 定时器任务设置循环任务执行时间 那么就会按照方法执行时间去执行 方法执行完毕 立刻再去执行方法。
如果一个方法执行时间 不超过定时器设置的任务时间 那么就会按照设置的时间去执行
总之就一句话 始终按照用时最长的那个去运行。 简单地说就是
更多相关内容 -
Java中定时器的分类
2021-04-17 08:42:56Java编程中定时器的分类:按技术分类:Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章...Java编程中定时器的分类:
按技术分类:
Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。
使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。
Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。
Timer 类实现代码:
(转自:http://blog.csdn.net/bzuld/article/details/8598776)
packagecom.lid;
importjava.util.Calendar;
importjava.util.Date;
importjava.util.Timer;
importjava.util.TimerTask;
publicclassTest {
publicstaticvoidmain(String[] args) {
//timer1();
timer2();
//timer3();
//timer4();
}
// 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time)
publicstaticvoidtimer1() {
Timer timer = newTimer();
timer.schedule(newTimerTask() {
publicvoidrun() {
System.out.println("-------设定要指定任务--------");
}
}, 2000);// 设定指定的时间time,此处为2000毫秒
}
// 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行
// schedule(TimerTask task, long delay, long period)
publicstaticvoidtimer2() {
Timer timer = newTimer();
timer.schedule(newTimerTask() {
publicvoidrun() {
System.out.println("-------设定要指定任务--------");
}
}, 1000,1000);
}
// 第三种方法:设定指定任务task在指定延迟delay后进行固定频率peroid的执行。
// scheduleAtFixedRate(TimerTask task, long delay, long period)
publicstaticvoidtimer3() {
Timer timer = newTimer();
timer.scheduleAtFixedRate(newTimerTask() {
publicvoidrun() {
System.out.println("-------设定要指定任务--------");
}
}, 1000,2000);
}
// 第四种方法:安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行.
// Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
publicstaticvoidtimer4() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12);// 控制时
calendar.set(Calendar.MINUTE, 0);// 控制分
calendar.set(Calendar.SECOND, 0);// 控制秒
Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00
Timer timer = newTimer();
timer.scheduleAtFixedRate(newTimerTask() {
publicvoidrun() {
System.out.println("-------设定要指定任务--------");
}
}, time, 1000*60*60*24);// 这里设定将延时每天固定执行
}
}
Quartz代码实现:
第一步:定义作业类
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class Job1 extends QuartzJobBean {
private int timeout;
private static int i = 0;
//调度工厂实例化后,经过timeout时间开始执行调度
public void setTimeout(int timeout) {
this.timeout = timeout;
}
/**
* 要调度的具体任务
*/
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
System.out.println("定时任务执行中…");
}
}
第二步:
spring
配置文件中配置作业类
JobDetailBean
Xml代码
说明:org.springframework.scheduling.quartz.JobDetailBean有两个属性,jobClass属性即我们在java代码中定义的任务类,jobDataAsMap属性即该任务类中需要注入的属性值。
第三步:配置作业调度的触发方式(触发器)
Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean
第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔30分钟运行一次。
配置方式如下:
Xml代码
第二种CronTriggerBean,支持到指定时间运行一次,如每天12:00运行一次等。
配置方式如下:
Xml代码
关于cronExpression表达式的语法参见附录。
第四步:配置调度工厂
Xml代码
说明:该参数指定的就是之前配置的触发器的名字。
第五步:启动你的应用即可,即将工程部署至tomcat或其他容器。
其实可以看出Quartz的配置看上去还是挺复杂的,没有办法,因为Quartz其实是个重量级的工具,如果我们只是想简单的执行几个简单的定时任务,有没有更简单的工具,有!
请看我第下文Spring task的介绍。
Spring-Task
上节介绍了在Spring 中使用Quartz,本文介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种
形式,下面将分别介绍这两种方式。
第一种:配置文件方式
第一步:编写作业类
即普通的pojo,如下:
Java代码
import org.springframework.stereotype.Service;
@Service
public class TaskJob {
public void job1() {
System.out.println(“任务进行中。。。”);
}
}
第二步:在spring配置文件头中添加命名空间及描述
Xml代码
xmlns:task="http://www.springframework.org/schema/task"
。。。。。。
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
第三步:spring配置文件中设置具体的任务
Xml代码
说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式,具体写法这里不介绍了,详情见上篇文章附录。
这个配置不消多说了,spring扫描注解用的。
到这里配置就完成了,是不是很简单。
第二种:使用注解形式
也许我们不想每写一个任务类还要在xml文件中配置下,我们可以使用注解@Scheduled,我们看看源文件中该注解的定义:
Java代码
@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scheduled
{
public abstract String cron();
public abstract long fixedDelay();
public abstract long fixedRate();
}
可以看出该注解有三个方法或者叫参数,分别表示的意思是:
cron:指定cron表达式
fixedDelay:官方文档解释:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示从上一个任务完成开始到下一个任务开始的间隔,单位是毫秒。
fixedRate:官方文档解释:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即从上一个任务开始到下一个任务开始的间隔,单位是毫秒。
下面我来配置一下。
第一步:编写pojo
Java代码
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component(“taskJob”)
public class TaskJob {
@Scheduled(cron = "0 0 3 * * ?")
public void job1() {
System.out.println(“任务进行中。。。”);
}
}
第二步:添加task相关的配置:
Xml代码
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"
default-lazy-init="false">
说明:理论上只需要加上这句配置就可以了,这些参数都不是必须的。
Ok配置完毕,当然spring task还有很多参数,我就不一一解释了,具体参考xsd文档http://www.springframework.org/schema/task/spring-task-3.0.xsd。
附录:
cronExpression的配置说明,具体使用以及参数请百度google
本文部分内容转自:http://lengchaotian.iteye.com/blog/1887439
-
Timer定时器工具类
2020-06-10 15:37:38* 定时任务工具类 * * @author ty * @version 2020-06-06 */ @Component public class TimerTaskUtil { //yml文件中配置调度时间 @Value("${schedule.millisecond}") private String period; //.../** * 定时任务工具类 * * @author ty * @version 2020-06-06 */ @Component public class TimerTaskUtil { //yml文件中配置调度时间 @Value("${schedule.millisecond}") private String period; //PostConstruct该注解标识程序启动时定时任务生效 @PostConstruct public void getMyTimerTask() { Timer timer = new Timer(); /** * 参数一:任务类对象 * 参数二:第一次执行前的延迟时间,单位毫秒 * 参数三:每隔毫秒时间执行一次 */ timer.schedule(new MyTimerTask(), 0, Long.parseLong(period)); } //定义一个执行任务的内部类 class MyTimerTask extends TimerTask { public void run() { //写需要执行的任务 } } }
-
java定时任务器(含源码)
2013-06-20 21:30:28用java写的任务定时器,设置想设的时间,选择可执行文件或者txt,word,时间一到便会自动运行。现在有源码。 -
自定义Java定时器.jar
2018-01-28 16:20:58这是一个jar。自定义的一个Java定时器工具类。主要是结合Spring Boot一起使用,并在Spring Boot启动的时候一起启动运行。 -
Java 动态定时器
2017-08-30 18:31:59本Java 动态定时器基于Java的定时器线程池,阻塞队列实现,定时调度时间采用cron表达式配置的方式,其中cron表达式解析工具类提取自spring。 用法极其简单,只需要将ScheduleUtils工具类复制到项目里,然后调用... -
Java 定时器Timer
2022-04-06 11:49:25Timer是Java提供的原生Scheduler(任务调度)工具类,用来在一个后台线程计划执行指定任务。 利用Timer可以安排任务“执行一次”或者定期“执行多次”。 Timer类提供了以下方法: schedule(TimerTask task, Date time...简介
Timer是Java提供的原生Scheduler(任务调度)工具类,用来在一个后台线程计划执行指定任务。
利用Timer可以安排任务“执行一次”或者定期“执行多次”。Timer类提供了以下方法:
- schedule(TimerTask task, Date time)
安排在 “指定的时间” 执行 指定的任务(只执行一次) - schedule(TimerTask task, Date firstTime , long period)
安排指定的任务在 "指定的时间 " 开始进行 “重复” 的固定延迟执行 - schedule(TimerTask task,long delay)
安排在指定延迟后执行指定的任务 - schedule(TimerTask task,long delay,long period)
安排指定的任务指定的延迟后开始进行重复的固定延迟执行 - scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
安排指定的任务在指定的时间开始进行重复的固定速率执行 - scheduleAtFixedRate(TimerTask task,long delay,long period)
安排指定的任务在指定的延迟后开始进行重复的固定速率执行 - Timer.cancal()
终止此计时器,丢弃所有当前已安排的任务 - Timer.purge()
从此计时器的任务队列中移除所有已取消的任务
示例:在指定的时间执行一次任务
public static void main(String[] args) throws ParseException { Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { System.out.println("***"); } }; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse("2022-4-6 12:07:00"); timer.schedule(task,date); }
示例
- 定时器任务
class MyTask extends TimerTask{ private Timer timer; public MyTask(Timer timer) { this.timer = timer; } @Override public void run() { System.out.println("****"); timer.cancel(); } }
- 定时执行任务,测试代码
public static void main(String[] args) throws ParseException { Timer timer = new Timer(); String str = "2022-4-6 15:36:52"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = sdf.parse(str); timer.schedule(new MyTask(timer),date); }
- schedule(TimerTask task, Date time)
-
Java定时任务的三种实现方法
2021-03-15 21:35:12三、ScheduledExecutorService ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。 相比于上两个方法,它有以下好处: 1.相比于Timer的单... -
【JAVA定时器】四种常见定时器的原理和简单实现,有图易懂
2021-07-06 16:53:27定时器顾名思义,即定时触发某个事件,分离开来,即包含三个因素:定时,触发,某个事件,本文也将以此为基础介绍五种常见的定时器 本文只做基于SpringBoot的示例,其余版本的请自行查阅资料,大同小异 1.介绍 ... -
Java定时器任务的使用
2022-04-16 10:47:13Java定时任务的使用方法 JDK自带Timer实现 ...对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 核心方法 // 在指定延迟时间后执行指定的任务 schedule(TimerTask task,long delay -
java自定义调度定时器工具类(java电商订单自动失效或收货)
2018-01-04 22:02:58java电商订单超时改状态工具类 最近在做一个电商项目,要求在用户下单后未付款30分钟后就将订单的状态改为失效,最初想的是用定时器没几秒去数据库查看有哪些订单未付款但超过30分的,就修改状态,这个方式有两种... -
java Timer定时器管理类
2021-03-06 03:58:541.java timer类,定时器类。启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定时操作所执行的动作,后一个参数是豪秒,代表间隔多久执行一次。2.... -
java定时器quartz实现解析
2021-03-22 18:12:20上次我们了解过了timer的有关内容,这次来了解下另外一个定时器quartz的实现,快来看看吧。1、首先,在pom.xml中进行最重要也是基础的导包环节org.quartz-schedulerquartz2.2.1<dependency>org.quartz-... -
java定时器的几种实现方式
2020-05-08 18:19:58有人说,计算机科学这个学科,软件方向研究到头就是数学,硬件方向研究到头就是物理,最轻松的是中间这批使用者,可以不太懂物理,不太懂数学,依旧可以使用计算机作为自己谋生的工具。这个规律具有普适应,看看... -
Java报表工具定时器参数之一
2021-02-12 20:25:36在FineReport报表工具为例,详细介绍一下定时器的参数。1.时间定时器中主要用到的时间参数如下:日报当前日期的前一天:Format(today()-1,”yyyy-MM-dd”)周报当前日期的上一周的第一天:Format(dateInWeek((today()... -
java 定时器的使用(Timer)
2021-03-10 04:39:59对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。private java.util.Timer timer;timer= new Timer(true);timer.schedule(new java.util.TimerTask() {public void run... -
Java实现定时器(Timer)
2022-05-23 08:38:14人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单... -
Java-定时器(内置-自定义(普通,分布式)可以切换)
2022-02-17 12:02:14} 自定义定时器 java内置的定时器基本都有点缺陷,很多场景不能灵活运用,那么我们何不自己写一个定时器呢? 写定时器前我们需要了解定时器的规则 时间钟 (寻找到时间的定时器) cron 定时器执行时间 count (定时器执行... -
怎么使用Java定时器Timer
2021-04-24 00:43:26timer 功能在指定的时间间隔内反复触发...本文文主要为大家详细介绍了Java定时器Timer的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。定时计划任务功能在Java中主要使用的就是Timer对象,它在内部... -
Java 定时器
2021-02-28 09:37:19Java 定时器1....Timer:是一个实用工具类,该类用来调度一个线程(schedule a thread) ,使它可以在将来某一时刻执行。Java 的 Timer 类可以调度一个任务运行一次或定期循环运行。Timer tasks should... -
【JAVA定时器】四种常见定时器的原理和简单实现
2020-09-11 17:46:37定时器顾名思义,即定时触发某个事件,分离开来,即包含三个因素:定时,触发,某个事件,本文也将以此为基础介绍五种常见的定时器 本文只做基于SpringBoot的示例,其余版本的请自行查阅资料,大同小异 1.介绍 1.1... -
java定时器timer配置
2021-03-22 18:08:34对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 pr......一、原理 JDK中,定时器任务的执行需要两个基本的类: java.util.Timer; java.util.TimerTask; 要运行一个定时任务,最基本的步骤如下: ... -
java定时器的使用
2013-02-26 14:37:37在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 -
java定时器对比
2021-03-08 19:13:06/** * * * ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。 * 相比于上两个方法,它有以下好处: * 1>相比于Timer的单线程,它是通过... -
在 Java中使用定时器
2021-12-26 00:48:37java 定时器 -
Java定时器的使用(Timer)
2021-03-09 20:51:43java定时器的使用(Timer)1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。private java.util.Timer timer;timer = ... -
java 定时器中任务的启动、停止、再启动
2021-02-27 11:26:30package ...import java.util.Date;import java.util.Timer;import com.cvicse.ump.timer.task.TimTaskTest;/*** 定时任务管理器* @author dyh**/public class TimerManager {/*** 单例模式*/private... -
Java定时器每小时执行一次
2021-07-28 18:19:02第1章 初识Redis 第2章 使用Redis构建Web应用 第二部分 核心概念: 对Redis命令进行了更详细的介绍,并展示了如何使用Redis去构建更为复杂的辅助工具和应用程序,并在最后展示了如何使用Redis去构建一个简单的社交... -
Java-Quartz定时器
2021-09-26 18:43:33Java-Quartz定时器 Quartz定时器介绍 Quartz是什么 简单来说就是一个任务调度框架,帮我们自动去执行这些程序。 大部分公司都会用到定时任务这个功能。 比如订单支付来说,超过一定时间会执行这个job,去判断你是否... -
java定时器的三种用法
2019-08-16 09:07:03* ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。 * 相比于上两个方法,它有以下好处: * 1>相比于Timer的单线程,它是通过线程池的...