Timer中schedule()的用法


schedule的意思(時間表、進度表)

timer.schedule(new TimerTask(){ void run()},0, 60*60*1000);
timer.schedule(new MyTask(event.getServletContext()), 0, 60*60*1000);
第一個參數"new MyTask(event.getServletContext())":
是 TimerTask 類,在包:import java.util.TimerTask .使用者要繼承該類,並實現 public void run() 方法,因為 TimerTask 類實現了 Runnable 接口。

第二個參數"0"的意思是:(0就表示無延遲)
當你調用該方法后,該方法必然會調用 TimerTask 類 TimerTask 類 中的 run() 方法,這個參數就是這兩者之間時間的差值,也就是說,用戶調用 schedule() 方法后,要等待這么長的時間才可以第一次執行 run() 方法。

第三個參數"60*60*1000"的意思就是:
(單位是毫秒60*60*1000為一小時)
(單位是毫秒3*60*1000為三分鍾)
第一次調用之后,從第二次開始每隔多長的時間調用一次 run() 方法。

 

[附:]

  技術人員在實現內部辦公系統與外部網站一體化的時候,最重要的步驟就是從OA系統讀取數據,並且根據網站模板生成最終的靜態頁面。這里就需要一個定時任務,循環的執行。

  技術人員在寫定時任務的時候,想當然的以為Timer.schedule(TimerTask task, longdelay)就是重復的執行task。程序運行后發現只運行了一次,總覺得是task里的代碼有問題,花了很長時間調試代碼都沒有結果。

  仔細研讀java api,發現:

  schedule(TimerTask task, long delay)的注釋:Schedules thespecified task for execution after the specifieddelay。大意是在延時delay毫秒后執行task。並沒有提到重復執行

  schedule(TimerTask task, long delay, long period)的注釋:Schedulesthe specified task for repeated fixed-delay execution, beginningafter the specified delay。大意是在延時delay毫秒后重復的執行task,周期是period毫秒。

  這樣問題就很明確schedule(TimerTask task, longdelay)只執行一次,schedule(TimerTask task, long delay, longperiod)才是重復的執行。關鍵的問題在於程序員誤以為schedule就是重復的執行,而沒有仔細的研究API,一方面也是英文能力不夠,瀏覽API的過程中不能很快的理解到含義。


免責聲明!

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



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