`

java定时器的使用

阅读更多
有时需要在一定时间段后,执行某一个操作

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可以都停也可停其中的几个
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics