java schedule参数_Java定时任务工具详解之Timer篇

本文深入探讨了Java中的定时任务调度工具Timer,包括其与Quartz的区别,Timer的定义、主要构件以及实战演练。通过示例展示了schedule和scheduleAtFixedRate的多种用法,阐述了它们在定时任务调度中的应用。
摘要由CSDN通过智能技术生成

Java定时任务调度工具详解

什么是定时任务调度?

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

在Java中的定时调度工具?

◆ Timer       ◆Quartz

Timer和Quarzt的区别?

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

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

◆ 底层机制

Timer简介

Timer的定义:

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

9d4ef6222c27cfa17c67a6afed05a4b0.png

主要构件:

8749e93109b1cea047c232d97665ec8a.png

11f6fe6cf2591323ce6860ec806b0991.png

第二部分 Timer实战演练

通过程序来讲解Timer

1 packagecn.springbook.timer;2

3 importjava.util.TimerTask;4

5 public class MyTimerTask extendsTimerTask {6

7 privateString name;8

9 //构造方法

10 publicMyTimerTask(String name) {11 this.name =name;12 }13

14 public voidrun() {15 //打印当前name的值

16 System.out.println("Current exec name is:" + this.name);17 }18

19 }

1 packagecn.springbook.timer;2

3 importjava.util.Timer;4

5 public classMyTimer {6 public static voidmain(String[] args) {7 //1、创建一个timer实例

8 Timer timer = newTimer();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 packagecn.springbook.timer;2

3 importjava.text.DateFormat;4 importjava.text.SimpleDateFormat;5 importjava.util.Calendar;6 importjava.util.TimerTask;7

8 public class MyTimerTask extendsTimerTask {9

10 privateString name;11

12 //构造方法

13 publicMyTimerTask(String name) {14 this.name =name;15 }16

17 public voidrun() {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 publicString getName() {27 returnname;28 }29

30 public voidsetName(String name) {31 this.name =name;32 }33

34

35

36 }

1 packagecn.springbook.timer;2

3 importjava.text.DateFormat;4 importjava.text.SimpleDateFormat;5 importjava.util.Calendar;6 importjava.util.Timer;7

8 public classMyTimer {9 public static voidmain(String[] args) {10 //1、创建一个timer实例

11 Timer timer = newTimer();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的时候执行且执行一次task21 * 如在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的时候执行且执行一次task3 * 如在2016-11-11 00:00:00执行一次task,打印任务名字4 * 之后每隔两秒执行一次task5 */

6 myTimerTask.setName("schedule2");7 timer.schedule(myTimerTask, calendar.getTime(), 2000);

schedule(task, delay)

参数

task - 所要安排的任务

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

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

1 /**

2 * 等待delay毫秒后执行且仅执行一次task3 * 如现在是2016-11-11 00:00:004 * 则在2016-11-11 00:00:01执行一次task,打印任务名字5 * 之后每隔1秒执行一次task6 */

7 myTimerTask.setName("schedule3");8 timer.schedule(myTimerTask, 1000);

schedule(task, delay, period)

参数

task  - 所要安排的任务

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

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

作用:

等待delay毫秒后首次执行task

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

1 /**

2 * 等待delay毫秒后执行且仅执行一次task3 * 如现在是2016-11-11 00:00:004 * 则在2016-11-11 00:00:01执行一次task,打印任务名字5 * 之后每隔2秒执行一次task6 */

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的时候首次执行一次task3 * 之后每隔period毫秒重复执行异一次task4 * 如在2016-11-11 00:00:00执行一次task,打印任务名字5 * 之后每隔两秒执行一次task6 */

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毫秒后执行且仅执行一次task3 * 之后每隔period毫秒重复执行异一次task4 * 如在2016-11-11 00:00:00执行一次task,打印任务名字5 * 之后每隔两秒执行一次task6 */

7 myTimerTask.setName("scheduleAtFixedRate2");8 timer.scheduleAtFixedRate(myTimerTask, 1000, 2000);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值