JAVA语言之Java定时任务工具详解之Timer篇
小标 2019-03-27 来源 : 阅读 980 评论 0

摘要:本文主要向大家介绍了JAVA语言之Java定时任务工具详解之Timer篇,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之Java定时任务工具详解之Timer篇,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

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

Java定时任务调度工具详解


什么是定时任务调度?


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


在Java中的定时调度工具?


◆ Timer       ◆Quartz


Timer和Quarzt的区别?


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


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


◆ 底层机制


Timer简介


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 /*
 在时间等于或超过time的时候执行且执行一次task
 如在2016-11-11 00:00:00执行一次task,打印任务名字
 之后每隔两秒执行一次task
5  */
6 myTimerTask.setName("schedule2");
7 timer.schedule(myTimerTask, calendar.getTime(), 2000);
复制代码


schedule(task, delay)


参数


task - 所要安排的任务


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


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


复制代码
1 /*
 等待delay毫秒后执行且仅执行一次task
 如现在是2016-11-11 00:00:00
 则在2016-11-11 00:00:01执行一次task,打印任务名字
 之后每隔1秒执行一次task
/
7 myTimerTask.setName("schedule3");
8 timer.schedule(myTimerTask, 1000);
复制代码


schedule(task, delay, period)


参数


task  - 所要安排的任务


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


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


作用:


  等待delay毫秒后首次执行task


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


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


scheduleAtFixedRate的两种用法


scheduleAtFixedRate(task, time, period)


参数


task - 所要安排的任务


time - 首次执行任务的时间


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


作用:


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


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


复制代码
1 /*
 在时间等于或超过time的时候首次执行一次task
 之后每隔period毫秒重复执行异一次task
 如在2016-11-11 00:00:00执行一次task,打印任务名字
 之后每隔两秒执行一次task
/
7 myTimerTask.setName("scheduleAtFixedRate1");
8 timer.scheduleAtFixedRate(myTimerTask, calendar.getTime(), 2000);
复制代码
scheduleAtFixedRate(task, delay, period)


参数


task  - 所要安排的任务


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


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


作用:


  等待delay毫秒后首次执行task


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


复制代码
1 /*
 等待delay毫秒后执行且仅执行一次task
 之后每隔period毫秒重复执行异一次task
 如在2016-11-11 00:00:00执行一次task,打印任务名字
 之后每隔两秒执行一次task
/
7 myTimerTask.setName("scheduleAtFixedRate2");

8 timer.scheduleAtFixedRate(myTimerTask, 1000, 2000);

   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved