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");
8 timer.scheduleAtFixedRate(myTimerTask, 1000, 2000);
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15177.html