java.util.Timerjava
java.util.TimerTaskide
Timer是一個定時器類,經過該類能夠爲指定的定時任務進行配置。TimerTask類是一個定時任務類,該類實現了Runnable接口,並且是一個抽象類,以下所示:測試
public abstract class TimerTask implements Runnablespa
能夠經過繼承該類,來實現本身的定時任務。線程
Timer定時器實例有多種構造方法:code
Timer()server
建立一個新計時器。blog
Timer(boolean isDaemon)繼承
建立一個新計時器,能夠指定其相關的線程做爲守護程序運行。接口
Timer(String name)
建立一個新計時器,其相關的線程具備指定的名稱。
Timer(String name, boolean isDaemon)
建立一個新計時器,其相關的線程具備指定的名稱,而且能夠指定做爲守護程序運行。
一、在特定時間執行任務,只執行一次
public void schedule(TimerTask task,Date time)
二、在特定時間以後執行任務,只執行一次
public void schedule(TimerTask task,long delay)
三、指定第一次執行的時間,而後按照間隔時間,重複執行
public void schedule(TimerTask task,Date firstTime,long period)
四、在特定延遲以後第一次執行,而後按照間隔時間,重複執行
public void schedule(TimerTask task,long delay,long period)
參數:
delay: 延遲執行的毫秒數,即在delay毫秒以後第一次執行
period:重複執行的時間間隔
五、第一次執行以後,特定頻率執行,與3同
public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
六、在delay毫秒以後第一次執行,後按照特定頻率執行
public void scheduleAtFixedRate(TimerTask task,long delay,long period)
方法名稱schedule()和scheduleAtFixedRate()二者的區別
<1>schedule()方法更注重保持間隔時間的穩定:保障每隔period時間可調用一次
<2>scheduleAtFixedRate()方法更注重保持執行頻率的穩定:保障屢次調用的頻率趨近於period時間,若是任務執行時間大於period,會在任務執行以後立刻執行下一次任務
Timer註銷
timer.cancel();
一、特定時間後執行
public void schedule(TimerTask task,long delay)
參數:
task爲:執行任務
delay:時間毫秒數
方法的含義:
在delay毫秒後執行任務task,只執行一次。
案例:
1分鐘後同步數據。
同步任務:
package com.yank.framework.common; import java.util.TimerTask; public class SynchroTimerTask extends TimerTask { @Override public void run() { // TODO Auto-generated method stub System.out.println("Synchro data to other servers."); } }
定時任務:
package com.yank.framework.common; import java.util.Timer; import java.util.TimerTask; public class SynchroTest { public static void main(String[] args) { // TODO Auto-generated method stub TimerTask task = new SynchroTimerTask(); Timer timer = new Timer(); timer.schedule(task, 1000); } }
二、案例2:按點吃飯
首先定義吃飯的任務,制定飯點,沒小時進行檢查,到點就吃飯。
package com.yank.framework.common; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.TimerTask; /* * 定時吃飯 * */ public class EatTimerTask extends TimerTask { //吃飯時間 private static List<Integer> eatTimes; /* * 靜態初始化 * */ static { initEatTimes(); } /* * 初始化吃飯時間 * */ private static void initEatTimes(){ eatTimes = new ArrayList<Integer>(); eatTimes.add(8); eatTimes.add(12); eatTimes.add(18); } /* * 執行 * */ @Override public void run() { // TODO Auto-generated method stub Calendar calendar = Calendar.getInstance(); System.out.println("檢查是否到了吃飯的點"); int hour = calendar.get(Calendar.HOUR_OF_DAY); if(eatTimes.contains(hour)) { System.out.println("餓了,吃飯..."); } } }
定時檢查執行:
package com.yank.framework.common; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class EatTimerTaskTest { public static void main(String[] arg){ TimerTask task = new EatTimerTask(); Calendar calendar= Calendar.getInstance(); Date firstTime = calendar.getTime(); //間隔:1小時 long period = 1000 * 60 * 60; //測試時間每分鐘一次 //period = 1000 * 60; Timer timer = new Timer(); timer.schedule(task, firstTime, period); } }