schedule與scheduleAtFixedRate比較


schedule與scheduleAtFixedRate:

不延時:

  schedule(TimerTask, Date runDate, long period)方法任務不延時----Date類型

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 /**
 7  * schedule(TimerTask, Date runDate, long period)方法任務不延時----Date類型
 8  */
 9 public class Test {
10     
11     public static class MyTask extends TimerTask{
12         @Override
13         public void run() {
14             try {
15                 System.out.println("begin timer =" + System.currentTimeMillis());
16                 Thread.sleep(1000);
17                 System.out.println("end timer =" + System.currentTimeMillis());
18             } catch (InterruptedException e) {
19                 e.printStackTrace();
20             }
21         }
22     }
23     
24     /**
25      * 從運行結果可以看出,當沒有延時,則下一次執行任務的開始時間是上一次任務的開始時間加上period時間(循環間隔)
26      */
27     public static void main(String[] args) {
28         MyTask task = new MyTask();
29         Calendar calendar = Calendar.getInstance();
30         Date runDate = calendar.getTime();
31         Timer timer = new Timer();
32         timer.schedule(task, runDate, 4000);
33     }
34 }

  schedule(TimerTask, long delay, long period)方法任務不延時----long類型

 1 import java.util.Timer;
 2 import java.util.TimerTask;
 3 
 4 /**
 5  * schedule(TimerTask, long delay, long period)方法任務不延時----long類型
 6  */
 7 public class Test2 {
 8     
 9     public static class MyTask extends TimerTask{
10         @Override
11         public void run() {
12             try {
13                 System.out.println("begin timer =" + System.currentTimeMillis());
14                 Thread.sleep(1000);
15                 System.out.println("end timer =" + System.currentTimeMillis());
16             } catch (InterruptedException e) {
17                 e.printStackTrace();
18             }
19         }
20     }
21     
22     /**
23      *         從運行結果可以看出,當沒有延時,則第一次執行任務的時間是任務的開始時間加上delay(延遲時間),
24      *         接下來執行任務的時間是上一次任務的開始時間加上period(循環間隔時間)
25      */
26     public static void main(String[] args) {
27         MyTask task = new MyTask();
28         System.out.println("當前時間為:" + System.currentTimeMillis());
29         Timer timer = new Timer();
30         timer.schedule(task, 3000, 4000);
31     }
32 }

  scheduleAtFixedRate(TimerTask, Date runDate, long period)方法任務不延時----Date類型

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 /**
 7  * scheduleAtFixedRate(TimerTask, Date runDate, long period)方法任務不延時----Date類型
 8  */
 9 public class Test {
10     
11     public static class MyTask extends TimerTask{
12         @Override
13         public void run() {
14             try {
15                 System.out.println("begin timer =" + System.currentTimeMillis());
16                 Thread.sleep(1000);
17                 System.out.println("end timer =" + System.currentTimeMillis());
18             } catch (InterruptedException e) {
19                 e.printStackTrace();
20             }
21         }
22     }
23     
24     /**
25      * 從運行結果可以看出,當沒有延時,則下一次執行任務的時間是上一次任務的開始時間加上period時間(循環間隔)
26      */
27     public static void main(String[] args) {
28         MyTask task = new MyTask();
29         Calendar calendar = Calendar.getInstance();
30         Date runDate = calendar.getTime();
31         Timer timer = new Timer();
32         timer.scheduleAtFixedRate(task, runDate, 4000);
33     }
34 }

  scheduleAtFixedRate(TimerTask, long delay, long period)方法任務不延時----long類型

 1 import java.util.Timer;
 2 import java.util.TimerTask;
 3 
 4 /**
 5  * scheduleAtFixedRate(TimerTask, long delay, long period)方法任務不延時----long類型
 6  */
 7 public class Test2 {
 8     
 9     public static class MyTask extends TimerTask{
10         @Override
11         public void run() {
12             try {
13                 System.out.println("begin timer =" + System.currentTimeMillis());
14                 Thread.sleep(1000);
15                 System.out.println("end timer =" + System.currentTimeMillis());
16             } catch (InterruptedException e) {
17                 e.printStackTrace();
18             }
19         }
20     }
21     
22     /**
23      *     從運行結果可以看出,當沒有延時,如果執行任務的時間沒有被延時,則第一次執行任務的時間是任務的開始時間加上delay(延遲時間),
24      *     接下來執行任務的時間是上一次任務的開始時間加上period(循環間隔時間)
25      */
26     public static void main(String[] args) {
27         MyTask task = new MyTask();
28         System.out.println("當前時間為:" + System.currentTimeMillis());
29         Timer timer = new Timer();
30         timer.scheduleAtFixedRate(task, 3000, 4000);
31     }
32 }

延遲:

  schedule(TimerTask, Date runDate, long period)方法 任務延時----Date類型

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 /**
 7  * schedule(TimerTask, Date runDate, long period)方法 任務延時----Date類型
 8  */
 9 public class Test3 {
10     
11     public static class MyTask extends TimerTask{
12         @Override
13         public void run() {
14             try {
15                 System.out.println("begin timer =" + System.currentTimeMillis());
16                 Thread.sleep(5000);
17                 System.out.println("end timer =" + System.currentTimeMillis());
18             } catch (InterruptedException e) {
19                 e.printStackTrace();
20             }
21         }
22     }
23     
24     /**
25      * 從運行結果可以看出,當有延時的情況下,如果執行任務的時間被延時,則下一次任務的執行時間是上一次任務結束時的時間作為參考計算
26      */
27     public static void main(String[] args) {
28         MyTask task = new MyTask();
29         Calendar calendar = Calendar.getInstance();
30         Date runDate = calendar.getTime();
31         Timer timer = new Timer();
32         timer.schedule(task, runDate, 2000);
33     }
34 }

  schedule(TimerTask, long delay, long period)方法任務延時----long類型

 1 import java.util.Timer;
 2 import java.util.TimerTask;
 3 
 4 /**
 5  * schedule(TimerTask, long delay, long period)方法
 6  *         任務延時----long類型
 7  */
 8 public class Test4 {
 9     
10     public static class MyTask extends TimerTask{
11         @Override
12         public void run() {
13             try {
14                 System.out.println("begin timer =" + System.currentTimeMillis());
15                 Thread.sleep(5000);//延時5秒
16                 System.out.println("end timer =" + System.currentTimeMillis());
17             } catch (InterruptedException e) {
18                 e.printStackTrace();
19             }
20         }
21     }
22     
23     /**
24      *     從運行結果可以看出,當有延時的情況下,如果執行任務的時間被延時,那么下一次任務的執行時間是上一次任務結束時的時間作為參考計算
25      */
26     public static void main(String[] args) {
27         MyTask task = new MyTask();
28         System.out.println("當前時間為:" + System.currentTimeMillis());
29         Timer timer = new Timer();
30         timer.schedule(task, 3000, 2000);
31     }
32 }

  scheduleAtFixedRate(TimerTask, Date runDate, long period)方法 任務延時----Date類型

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 /**
 7  * scheduleAtFixedRate(TimerTask, Date runDate, long period)方法 任務延時----Date類型
 8  */
 9 public class Test3 {
10     
11     public static class MyTask extends TimerTask{
12         @Override
13         public void run() {
14             try {
15                 System.out.println("begin timer =" + System.currentTimeMillis());
16                 Thread.sleep(5000);
17                 System.out.println("end timer =" + System.currentTimeMillis());
18             } catch (InterruptedException e) {
19                 e.printStackTrace();
20             }
21         }
22     }
23     
24     /**
25      * 從運行結果可以看出,當有延時的情況下,如果執行任務的時間被延時,則下一次任務的執行時間是上一次任務結束時的時間作為參考計算
26      */
27     public static void main(String[] args) {
28         MyTask task = new MyTask();
29         Calendar calendar = Calendar.getInstance();
30         Date runDate = calendar.getTime();
31         Timer timer = new Timer();
32         timer.scheduleAtFixedRate(task, runDate, 2000);
33     }
34 }

  scheduleAtFixedRate(TimerTask, long delay, long period)方法任務延時----long類型

 1 import java.util.Timer;
 2 import java.util.TimerTask;
 3 
 4 /**
 5  * scheduleAtFixedRate(TimerTask, long delay, long period)方法
 6  *         任務延時----long類型
 7  */
 8 public class Test4 {
 9     
10     public static class MyTask extends TimerTask{
11         @Override
12         public void run() {
13             try {
14                 System.out.println("begin timer =" + System.currentTimeMillis());
15                 Thread.sleep(5000);//延時5秒
16                 System.out.println("end timer =" + System.currentTimeMillis());
17             } catch (InterruptedException e) {
18                 e.printStackTrace();
19             }
20         }
21     }
22     
23     /**
24      *     從運行結果可以看出,當有延時的情況下,如果執行任務的時間被延時,那么下一次任務的執行時間是上一次任務結束時的時間作為參考計算
25      */
26     public static void main(String[] args) {
27         MyTask task = new MyTask();
28         System.out.println("當前時間為:" + System.currentTimeMillis());
29         Timer timer = new Timer();
30         timer.scheduleAtFixedRate(task, 3000, 2000);
31     }
32 }

 

測試schedule()方法不具有追趕執行性:

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 public class Test {
 7 
 8     public static class MyTask extends TimerTask {
 9         @Override
10         public void run() {
11             System.out.println("begin timer:" + new Date());
12             System.out.println("end timer:" + new Date());
13         }
14     }
15     
16     /**
17      *     測試schedule()方法不具有追趕執行性
18      *         也就是如果計划時間在當前時間之前,那么當運行程序時,任務從當前時間開始執行,
19      *         計划時間到當前之間這段時間的任務就被取消了,不被執行,也就是任務不追趕
20      */
21     public static void main(String[] args) {
22         MyTask task = new MyTask();
23         System.out.println("現在執行時間:" + new Date());
24         Calendar calendar = Calendar.getInstance();
25         calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)-20);
26         Date runDate = calendar.getTime();
27         System.out.println("計划執行時間為:" + runDate);
28         Timer timer = new Timer();
29         timer.schedule(task, runDate, 2000);
30     }
31 }

測試scheduleAtFixedRate()方法具有追趕執行性:

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.Timer;
 4 import java.util.TimerTask;
 5 
 6 public class Test2 {
 7 
 8     public static class MyTask extends TimerTask {
 9         @Override
10         public void run() {
11             System.out.println("begin timer:" + new Date());
12             System.out.println("end timer:" + new Date());
13         }
14     }
15     
16     /**
17      *     測試scheduleAtFixedRate()方法具有追趕執行性
18      *         從運行結果可以看到,計划執行時間和當前時間之間對應的任務被補充性的執行,這就是task任務追趕特性
19      *         白話就是雖然時間過了,但是任務會在當前被補充執行完
20      */
21     public static void main(String[] args) {
22         MyTask task = new MyTask();
23         System.out.println("現在執行時間:" + new Date());
24         Calendar calendar = Calendar.getInstance();
25         calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)-20);
26         Date runDate = calendar.getTime();
27         System.out.println("計划執行時間為:" + runDate);
28         Timer timer = new Timer();
29         timer.scheduleAtFixedRate(task, runDate, 2000);
30     }
31 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM