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

Java定时任务工具详解之Timer篇

程序员文章站 2022-05-25 14:37:08
Java定时任务调度工具详解 什么是定时任务调度? ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务。 在Java中的定时调度工具? ◆ Timer ◆Quartz Timer和Quarzt的区别? ◆ 出身不同(Timer由JDK直接提供,调用方式简单粗暴,不需要别的jar支持 ......

java定时任务调度工具详解

什么是定时任务调度?

◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务。

在java中的定时调度工具?

◆ timer       ◆quartz

timer和quarzt的区别?

◆ 出身不同(timer由jdk直接提供,调用方式简单粗暴,不需要别的jar支持)

◆ 能力区别(timer简单的定时任务,如需要每个星期天的8点,则需要quarzt)

◆ 底层机制

 

timer简介

timer的定义:

有且仅有一个后台线程对多个业务线程进行定时定频率的调度。

Java定时任务工具详解之Timer篇

主要构件:

Java定时任务工具详解之Timer篇

Java定时任务工具详解之Timer篇

第二部分 timer实战演练

通过程序来讲解timer

 1 package cn.springbook.timer;
 2 
 3 import java.util.timertask;
 4 
 5 public class mytimertask extends timertask {
 6 
 7     private string name;
 8     
 9     // 构造方法
10     public mytimertask(string name) {
11         this.name = name;
12     }
13 
14     public void run() {
15         // 打印当前name的值
16         system.out.println("current exec name is:" + this.name);
17     }
18 
19 }
 1 package cn.springbook.timer;
 2 
 3 import java.util.timer;
 4 
 5 public class mytimer {
 6     public static void main(string[] args) {
 7         // 1、创建一个timer实例
 8         timer timer = new timer();
 9         // 2、创建一个mytimertask实例
10         mytimertask mytimertask = new mytimertask("no.1");
11         // 3、通过timer定时定频率调用mytimertask的业务逻辑
12         // 即第一次执行是在当前时间的两秒之后,之后每隔一秒钟执行一次
13         timer.schedule(mytimertask, 2000l, 1000l);
14     }
15 }

 

timer的定时调度函数

schedule的四种用法

scheduleatfixedrate的两种用法

schedule的四种用法:

schedule(task, time)

参数

task -  所要安排的任务

time - 执行任务的时间

作用:在时间等于或超过time的时候执行且仅执行一次task

 1 package cn.springbook.timer;
 2 
 3 import java.text.dateformat;
 4 import java.text.simpledateformat;
 5 import java.util.calendar;
 6 import java.util.timertask;
 7 
 8 public class mytimertask extends timertask {
 9 
10     private string name;
11     
12     // 构造方法
13     public mytimertask(string name) {
14         this.name = name;
15     }
16 
17     public void run() {
18         
19         calendar calendar = calendar.getinstance();
20         dateformat format = new simpledateformat("yyyy-mm-dd hh:mm:ss");
21         system.out.println("current exec time is:" + format.format(calendar.gettime()));
22         // 打印当前name的值
23         system.out.println("current exec name is:" + this.name);
24     }
25 
26     public string getname() {
27         return name;
28     }
29 
30     public void setname(string name) {
31         this.name = name;
32     }
33     
34     
35 
36 }
 1 package cn.springbook.timer;
 2 
 3 import java.text.dateformat;
 4 import java.text.simpledateformat;
 5 import java.util.calendar;
 6 import java.util.timer;
 7 
 8 public class mytimer {
 9     public static void main(string[] args) {
10         // 1、创建一个timer实例
11         timer timer = new timer();
12         // 2、创建一个mytimertask实例
13         mytimertask mytimertask = new mytimertask("no.1");
14         
15         calendar calendar = calendar.getinstance();
16         dateformat format = new simpledateformat("yyyy-mm-dd hh:mm:ss");
17         system.out.println("current exec time is:" + format.format(calendar.gettime()));
18         calendar.add(calendar.second, 3);
19         /**
20          * 在时间等于或超过time的时候执行且执行一次task
21          * 如在2016-11-11 00:00:00执行一次task,打印任务名字
22          */
23         mytimertask.setname("schedule1");
24         timer.schedule(mytimertask, calendar.gettime());
25     }
26 }

 

schedule(task, time, period)

参数

task - 所要安排的任务

time - 首次执行任务的时间

period - 执行一次task的时间间隔,单位是毫秒

1 /**
2  * 在时间等于或超过time的时候执行且执行一次task
3  * 如在2016-11-11 00:00:00执行一次task,打印任务名字
4  * 之后每隔两秒执行一次task
5  */
6 mytimertask.setname("schedule2");
7 timer.schedule(mytimertask, calendar.gettime(), 2000);

 

schedule(task, delay)

参数

task - 所要安排的任务

delay - 执行任务前的延时时间,单位是毫秒

作用:等待delay毫秒后执行且仅执行一次task

1 /**
2  * 等待delay毫秒后执行且仅执行一次task
3  * 如现在是2016-11-11 00:00:00
4  * 则在2016-11-11 00:00:01执行一次task,打印任务名字
5  * 之后每隔1秒执行一次task
6  */
7 mytimertask.setname("schedule3");
8 timer.schedule(mytimertask, 1000);


 

schedule(task, delay, period)

参数

task  - 所要安排的任务

delay - 执行任务前的延迟时间,单位毫秒

period - 执行一次task的时间间隔,单位是毫秒

作用:

  等待delay毫秒后首次执行task

  之后每隔period毫秒重复执行一次task

1 /**
2  * 等待delay毫秒后执行且仅执行一次task
3  * 如现在是2016-11-11 00:00:00
4  * 则在2016-11-11 00:00:01执行一次task,打印任务名字
5  * 之后每隔2秒执行一次task
6  */
7 mytimertask.setname("schedule4");
8 timer.schedule(mytimertask, 3000, 1000);


scheduleatfixedrate的两种用法

scheduleatfixedrate(task, time, period)

参数

task - 所要安排的任务

time - 首次执行任务的时间

period - 执行一次task的时间间隔,单位是毫秒

作用: 

  时间等于或超过time时首次执行task

  之后每隔period毫秒重复执行一次task

 

1 /**
2  * 在时间等于或超过time的时候首次执行一次task
3  * 之后每隔period毫秒重复执行异一次task
4  * 如在2016-11-11 00:00:00执行一次task,打印任务名字
5  * 之后每隔两秒执行一次task
6  */
7 mytimertask.setname("scheduleatfixedrate1");
8 timer.scheduleatfixedrate(mytimertask, calendar.gettime(), 2000);

scheduleatfixedrate(task, delay, period)

参数

task  - 所要安排的任务

delay - 执行任务前的延迟时间,单位毫秒

period - 执行一次task的时间间隔,单位是毫秒

作用: 

  等待delay毫秒后首次执行task

  之后每隔period毫秒重复执行一次task

1 /**
2  * 等待delay毫秒后执行且仅执行一次task
3  * 之后每隔period毫秒重复执行异一次task
4  * 如在2016-11-11 00:00:00执行一次task,打印任务名字
5  * 之后每隔两秒执行一次task
6  */
7 mytimertask.setname("scheduleatfixedrate2");
8 timer.scheduleatfixedrate(mytimertask, 1000, 2000);