Java核心类库——Timer(定时器)和TimerTask

时间:2022-02-22 03:42:01

有的时候我们需要每隔一段时间去执行某个任务,在Java中提供了Timer and TimerTask来完成这个任务

 Timer(定时器)和TimerTask

 

  Timer和TimerTask的方法很少,使用起来也非常方便。希望如果遇到问题参考一下API doc,里面写的很清楚。TimerTask是个抽象类,他扩展了Object并实现了Runnable接口,因此你必须在自己的Task中实现public void run()方法。这也就是我们需要执行的具体任务。Timer实际上是用来控制Task的,他提供的主要方法是重载的schedule()方法。

如何使用Timer(定时器)和TimerTask?

 1) 可以安排自动的计划任务的类,每个任务都是一个线程
 2) 创建Timer 实例
 3) 为Timer 实例增加计划任务,计划任务是一个接口
 4)使用cancel() 清除 timer对象上所有任务计划
例: 1 倒计时,每隔一秒显示一下时间
     2 计时结束清楚计时任务

 

 1 import java.util.Calendar;
 2 import java.util.Date;
 3 import java.util.GregorianCalendar;
 4 import java.util.Timer;
 5 import java.util.TimerTask;
 6 
 7 public class TimerDemo {
 8  public static void main(String[] args) {
 9   //创建一个定时器
10   final Timer timer = new Timer();
11   //倒计时
12   //从0毫秒开始,每隔1秒钟显示剩余时间,10秒以后结束计时
13   final long end = System.currentTimeMillis() + 1000*10;//end代表计时结束的时刻,10秒以后的时刻
14   
15   timer.schedule(new TimerTask(){
16    public void run() {
17     //show 表示剩余时间
18     long show = end-System.currentTimeMillis();
19     long h = show/1000/60/60;//取小时
20     long m = show/1000/60%60;//取不够一个小时的分钟
21     long s = show/1000%60;//取不够一分钟的秒
22     System.out.println(h+":"+m+":"+s);
23    }
24   }, 0, 1000);
25   //到时间后停止  
26   timer.schedule(new TimerTask(){
27    public void run() {
28     timer.cancel();
29    }
30   }, new Date(end));
31   
32   //闹钟
33   /*//计算出明天早上7:00:00作为开始时间start
34   Calendar cal = new GregorianCalendar();
35   cal.add(Calendar.DAY_OF_YEAR, 1);
36   cal.set(Calendar.HOUR_OF_DAY,7);
37   cal.set(Calendar.MINUTE,0);
38   cal.set(Calendar.SECOND,0);
39   Date start = cal.getTime();
40   
41   //计划明天早晨7点开始,间隔24小时,执行计划
42   timer.schedule(new TimerTask(){
43    public void run() {
44     System.out.println("该起床了!");
45    }
46   }, start,1000L*60*60*24);*/
47  }
48 }