Java定时任务工具详解之Timer篇编程语言

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);

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15177.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论