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