java 类 Timer 和 TimerTask 的使用
Timer 类是用来执行任务的类,它接受一个 TimerTask 做参数
Timer 有两种执行任务的模式,最常用的是 schedule,它可以以两种方式执行任务:1:在
某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频
率.看个简单的例子
importjava.io.IOException;
importjava.util.Timer;
publicclassTimerTest{
publicstaticvoidmain(String[]args){
Timertimer=newTimer();
timer.schedule(newMyTask(),1000,2000);//在 1 秒后执行此任务,每次间隔 2 秒,如
果传递一个 Data 参数,就可以在某个固定的时间执行这个任务.while(true){//这个是用来
停止此任务的,否则就一直循环执行此任务了
try{
intch=System.in.read();
if(ch-'c'==0){
timer.cancel();//使用这个方法退出任务FFFFFFFFFFFFFFFFFFFF
}
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
staticclassMyTaskextendsjava.util.TimerTask{
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("________");
}
}
}
如果你使用的是 JDK 5+,还有一个 scheduleAtFixedRate 模式可以用,在这个模式下,Timer
会尽量的让任务在一个固定的频率下运行,举例说明:在上面的例子中,我们想让 MyTask 在 1
秒钟后,每两秒钟执行一次,但是因为 java 不是实时的(其实 java 实时性很差.....),所以,我们
在上个程序中表达的原义并不能够严格执行.如果我们调用的是 scheduleAtFixedRate,那
么,Timer 会尽量让你的 Task 执行的频率保持在 2 秒一次.运行上面的程序,假设使用的是
scheduleAtFixedRate,那么下面的场景就是可能的:1 秒钟后,MyTask执行一次,因为系统繁
忙,之后的 2.5 秒后 MyTask才得以执行第二次,然后,Timer 记下了这个延迟,并尝试在下一个
评论2
最新资源