如果您想要在某个时间点之后,执行某项排定的任务,您可以定义一个TimerTask,再将之排定给Timer,Timer会依指定的时间来执行TimerTask。
举个实例来说,您想在程序启动后5秒钟执行报时,则您可以继承TimerTask,并覆盖其run()方法。
package onlyfun.caterpillar;
import java.util.*;
public class DateTask extends TimerTask { public void run() { System.out.println("任务时间:" + new Date()); } }
在run()方法中,只简单的显示run()方法被执行的时间,TimerTask的排程执行要交给Timer对象,例如:
package onlyfun.caterpillar;
import java.util.*;
public class Main { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new DateTask(), 5000); System.out.println("现在时间:" + new Date());
try { Thread.sleep(8000); } catch(InterruptedException e) { }
timer.cancel(); } }
Timer对象的schedule()方法接受TimerTask实例,并可以给它一个毫秒数,表示schedule()方法执行后,几毫秒之后执行
TimerTask中的run()方法,Timer对象在启动排程后,如果要停止,则要执行cancel()方法,这个程序的执行结果如下:
现在时间:Fri Jan 19 10:47:10 CST 2007
任务时间:Fri Jan 19 10:47:15 CST 2007
|
除了指定几毫秒之后执行任务之外,您还可以要求Timer对象,每隔多少时间就执行一次TimerTask的run()方法,例如一秒后开始执行TimerTask,而后每隔3秒执行一次:
package onlyfun.caterpillar;
import java.util.*;
public class Main { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new DateTask(), 1000, 3000); System.out.println("现在时间:" + new Date());
try { Thread.sleep(20000); } catch(InterruptedException e) { }
timer.cancel(); } }
执行结果如下:
现在时间:Fri Jan 19 10:49:43 CST 2007
任务时间:Fri Jan 19 10:49:44 CST 2007
任务时间:Fri Jan 19 10:49:47 CST 2007
任务时间:Fri Jan 19 10:49:50 CST 2007
任务时间:Fri Jan 19 10:49:53 CST 2007
任务时间:Fri Jan 19 10:49:56 CST 2007
任务时间:Fri Jan 19 10:49:59 CST 2007
任务时间:Fri Jan 19 10:50:02 CST 2007 |
Timer的schedule()方法也可以接受Date实例,例如您想直接排定执行日为一个月之后,则可以透过Calendar来计算,再取得Date时间:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 1);
System.out.println("任务排定时间:" + c.getTime());
Timer timer = new Timer();
timer.schedule(new DateTask(), c.getTime(), 3000);
Timer与TimerTask是独立的两个对象,当使用Timer的schedule()方法排定TimerTask之后,则必须等执行Timer的
cancel()执行之后,让TimerTask与Timer脱离关系,TimerTask才可以重新加入其它Timer的排程。
|