Java面试问题之三十七

请说说你对Java定时器的认识,尝试写一个例子来说明。

答:在JDK中的java.util包中提供了一个使用类Timer,它能够定时执行特定的任务。TimerTask类表示定时执行某一项任务。比如,下面的代码段说明了Java定时器的使用方法。



import java.util.Timer;
import java.util.TimerTask;

public class MachineTimerTask extends Thread {
private int a;
private static int count;

public void start(){
super.start();
Timer timer=new Timer(true);
TimerTask task=new TimerTask(){
public void run() {
reset();
try {
sleep(1000);
}catch(InterruptedException e){

}
}
};
timer.schedule(task,10,500); //setting timer task

}

public void reset() {
a=0;
}

public void run() {
while(true) {
System.out.println(getName()+":"+a++);
if(count++==100) break;
yield();
}
}

public static void main(String[] args) throws Exception {
MachineTimerTask machine = new MachineTimerTask();
machine.start();
}
}



java.util.TimerTask类是一个抽象类,它实现了Runnable接口。在MachineTimerTask类中的start()方法定义了一个匿名类继承了TimerTask类,它的run()方法表示定时器需要定时完成的任务。

java.util.TimerTask类的构造方法有几种重载形式,有一种构造方法Timer(boolean isDaemon)允许把与Timer关联的线程设置为后台线程。特别注意的是Timer类本身并不是线程类,但是在它的实现中,利用线程来执行定时任务。

Timer类的schedule(TimerTask task, long delay, long period)方法用来设置定时器需要定时执行的任务。task参数表示任务;delay参数表示延迟执行的时间,以毫秒为单位;period参数表示每次执行任务的间隔时间,也是以毫秒为单位。

timer.schedule(task,10,500);

以上代码表明定时器在10毫秒之后开始执行task任务,以后每隔500毫秒重复执行一次task任务。Timer类的schedule方法还有一种重载形式:schedule(TimerTask task, long delay)。如果使用这个方法,那就表明仅仅执行一次任务,例如:

timer.schedule(task,10);

以上代码表示定时器在10毫秒之后执行task任务,以后不再重复执行了。

同一个定时器可以执行多个定时任务,比如:

timer.schedule(task1,0,1000);
timer.schedule(task2,0,500);

以上代码表示定时器会执行两个定时任务,第一个任务每隔1秒执行一次,第二个任务每隔500毫秒执行一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值