有时需要在一定时间段后,执行某一个操作
java中现有的Timer与TimerTask类
我们在实际使用中可能出现定时run一个程序或者重复的run,这种情况下,就可以使用Timer与TimerTask
Timer和TimerTask这两个类。在java.util这个包中可以找到这两个类。Timer直接从Object继承,它相当于一个计时器,能够用它来指定某个时间来执行一项任务,或者每隔一定时间间隔反复执行同一个任务。创建一个Timer后,就会生成一个线程在背后运行,来控制任务的执行。而TimerTask就是用来实现某项任务的类,它实现了Runnable接口,因此相当于一个线程。更多相关的知识请参见JDK文档。
Timer的schedule方法主要有如下几种重载形式:
--schedule(TimerTask task,long delay) 指定隔多长时间(delay)后执行TimerTask类中的任务代码
--schedule(TimerTask task,Date time) 指定在什么时候(date)开始执行TimerTask类中的任务代码
--schedule(TimerTask task,long delay ,long period) 指定隔多长时间(delay)后定期执行TimerTask类中的任务代码,period指定了定期的时间间隔
--schedule(TimerTask task, Date firstTime , long period) 指定在什么时候(date)开始定期执行TimerTask类中的任务代码,period指定了定期的时间间隔
TimerTask类实现了Runnable接口,要执行的任务由它里面实现的run方法来完成。
1,要完成的任务:
import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;
class println{
public void printlntime(){
System.out.println(new Date());
}
}
2,将要完成的任务写入Timetask线程主体里
class TimerTasktask extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("start");
println a=new println();
a.printlntime();
}
}
调用java.util.Timer
public class TimerTaskTest {
public static void main(String[] args){
Timer timer = new Timer();
timer.schedule(new TimerTasktask(), 1000, 2000);
try{
Thread.sleep(1000);
}catch(Exception ex){
timer.cancel();
}
}
}
例2:
import java.util.*;
public class TimeTest extends TimerTask {
String index;
Timer myTimer = new Timer();
public TimeTest(String index) {
this.index = index;
}
public void run() {
System.out.println(index);
}
public static void main(String args[]) {
TimeTest myTask1 = new TimeTest("First task");
myTask1.start(0,3);
TimeTest myTask2 = new TimeTest("Second task");
myTask2.start(0,1);
try{
Thread.sleep(6000);
}
catch(InterruptedException e){
}
myTask1.end();
myTask2.end();//程序结束时用cancel()结束Timer
}
public void start(int delay, int internal) {
myTimer.schedule(this, delay * 1000, internal * 1000); //利用timer.schedule方法
}
public void end(){
myTimer.cancel();
}
}
运行结果为:
First task
Second task
Second task
Second task
First task
Second task
Second task
Second task
例2的一个Timer对应多个TimerTask,多个TimeTask可以都停也可停其中的几个