java.util.Timer可以在程序中定时实现任务,Timer需要继承java.util.TimerTask并实现类中的 run() 方法,实际上TimerTask是一个抽象类,他继承了java.lang.Runnable接口。
package yehaizi.util.timers; import java.util.TimerTask; public class MyTimerTask extends TimerTask { public MyTimerTask(){ super(); } public void run() { // TODO Auto-generated method stub System.out.println("定时器Run......"); } }
Timer类中 schedule方法与scheduleAtFixedRate方法启动定时执行。下面看个简单的实例:
package com.util.timers; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import com.util.timers.MyTimerTask; public class TimerManager { private Timer t=null; public TimerManager(){ } //根据给定的时间启动定时器,如果给定的时间小于当前时间,则启动定时器执行,并只执行一次任务。 public void time(TimerTask timer,Date date){ t=new Timer(); t.schedule(timer,date); } //销毁定时器 public void destoryTimer(){ t.cancel(); } public static void main(String arges[]){ TimerManager tm=new TimerManager(); MyTimerTask mk=new MyTimerTask(); tm.time(mk, new Date()); tm.destoryTimer(); } }
程序输出的结果是:定时器Run...... 并且任务只执行一次。
Timer类schedule方法或者scheduleAtFixedRate方法启动定时执行,schedule重载了四个版本,scheduleAtFixedRate重载了两个。
package com.util.timers; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import com.util.timers.MyTimerTask; public class TimerManager { private Timer t=null; public TimerManager(){ } //会在指定的时间点执行一次任务。 public void time(TimerTask task,long delay){ t=new Timer(); t.schedule(task,delay); } //根据给定的时间启动定时器,如果给定的时间小于当前时间,则启动定时器执行,并只执行一次任务。 public void time(TimerTask timer,Date date){ t=new Timer(); t.schedule(timer,date); } //在指定的时间后执行任务,并且在设定的周期定时执行任务。arg0未给定周期,单位毫秒 public void time(TimerTask timer,Date date,long arg0){ t=new Timer(); t.schedule(timer, date,arg0); } //会在指定的时间点执行一次任务,并且在设定的周期定时执行任务 public void time(TimerTask task,long delay,long period){ t=new Timer(); t.schedule(task, delay,period); } //在指定的时间点执行任务,然后从该时间点开始. //在设定的周期定时执行任务。 //如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务。 //比如程序1秒执行一次,延迟2秒后执行,但是因为垃圾收集延迟了2.5秒,那么下次任务会在1.5秒时执行 //抢回应上次延迟多出的0.5秒 public void timeAtFixedRate(TimerTask task,long delay,long period){ t=new Timer(); t.scheduleAtFixedRate(task,delay,period); } //在指定的时间执行任务,然后从该时间点开始. //在设定的周期定时执行任务。 //如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务。 //比如程序1秒执行一次,延迟2秒后执行,但是因为垃圾收集延迟了2.5秒,那么下次任务会在1.5秒时执行 //抢回应上次延迟多出的0.5秒 public void timeAtFixedRate(TimerTask task,Date delay,long period){ t=new Timer(); t.scheduleAtFixedRate(task,delay,period); } //销毁定时器 public void destoryTimer(){ t.cancel(); } public static void main(String arges[]){ TimerManager tm=new TimerManager(); MyTimerTask mk=new MyTimerTask(); tm.time(mk, new Date()); tm.destoryTimer(); } }