您的位置:首页 > 编程语言 > Java开发

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

2018-12-16 11:18 218 查看

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 /*
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"); 欢迎工作一到五年的Java工程师朋友们加入Java群: 891219277
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java Timer