Java定時任務調度工具詳解java
什麼是定時任務調度?spring
◆ 基於給定的時間點,給定的時間間隔或者給定的執行次數自動執行的任務。函數
在Java中的定時調度工具?工具
◆ Timer ◆Quartzthis
Timer和Quarzt的區別?spa
◆ 出身不一樣(Timer由JDK直接提供,調用方式簡單粗暴,不須要別的jar支持)線程
◆ 能力區別(TImer簡單的定時任務,如須要每一個星期天的8點,則須要Quarzt)code
◆ 底層機制orm
Timer簡介blog
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 // 一、建立一個timer實例 8 Timer timer = new Timer(); 9 // 二、建立一個MyTimerTask實例 10 MyTimerTask myTimerTask = new MyTimerTask("No.1"); 11 // 三、經過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 // 一、建立一個timer實例 11 Timer timer = new Timer(); 12 // 二、建立一個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);