簡單理解java中timer的schedule和scheduleAtFixedRate方法的區別


  timer的schedule和scheduleAtFixedRate方法一般情況下是沒什么區別的,只在某個情況出現時會有區別--當前任務沒有來得及完成下次任務又交到手上。


 

我們來舉個例子:

暑假到了老師給schedule和scheduleAtFixedRate兩個同學布置作業。

老師要求學生暑假每天寫2頁,30天后完成作業。

這兩個學生每天按時完成作業,直到第10天,出了意外,兩個學生出去旅游花了5天時間,這5天時間里兩個人都沒有做作業。任務被拖延了。

這時候兩個學生采取的策略就不同了:

schedule重新安排了任務時間,旅游回來的第一天做第11天的任務,第二天做第12天的任務,最后完成任務花了35天。

scheduleAtFixedRate是個守時的學生,她總想按時完成老師的任務,於是在旅游回來的第一天把之前5天欠下的任務以及第16天當天的任務全部完成了,之后還是按照老師的原安排完成作業,最后完成任務花了30天。


 

 1 package day01;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Timer;
 5 import java.util.TimerTask;
 6 
 7 public class Test01 {
 8     public static void main(String[] args) {
 9         final Timer timer = new Timer();
10         //timer.scheduleAtFixedRate(new TimerTask() {
11         timer.schedule(new TimerTask() {//分別注釋這行和上面這行試一試效果
12             int count = 1;
13 
14             @Override
15             public void run() {
16                 count++;
17                 if (count  == 10) {
18                     try {
19                         Thread.sleep(5000);
20                     } catch (InterruptedException e) {
21                         System.out.println("延遲5s");
22                         e.printStackTrace();
23                     }
24                 }
25                 SimpleDateFormat sf = new SimpleDateFormat(
26                         "yyyy MM dd hh:mm:ss");
27                 System.out.println("當前時間:"
28                         + sf.format(System.currentTimeMillis()) + "計划時間:"
29                         + sf.format(scheduledExecutionTime()));
30             }
31         }, 1000, 1000);
32     }
33 }

希望能幫到大家!


免責聲明!

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



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