Java定時任務工具詳解之Timer篇

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);
相關文章
相關標籤/搜索