java 定时运行任务整理学习

     如何才能实现让一个Java程序定时运行呢?

     Java基本类库里面,提供了两个工具供我们使用,它们是java.util.Timer和java.util.TimerTask。

Timer是一个对象,这个对象在初始化之初,会创建一个后台进程(TimerThread),同时创建一个任务队列(TaskQueue),然后后台进程开始检测TaskQueue中是否存在等待调度的任务,如果存在,就运行之,如果不存在,就等待(Object.wait())。

      对于程序员可见的类是Timer和TimerTask,TimerTask是一个抽象类,是能够被Timer所调度的一种对象,所有希望定时执行的任务,只要实现TimerTask类即可,然后使用Timer的schedule方法,给定一定的参数,即可实现定时执行,或者周期执行。

       schedule方法的本质,是将一个TimerTask对象添加到了TaskQueue中,这个TaskQueue是一个堆(可以动态增长),可以管理很多的Task。

      Timer的本质,就是一个线程,按照指定的时间顺序,来顺次执行一个又一个的任务,根据这种性质,我们可以知道,Timer实现的定时不可能准确,而且,还会收到任务本身耗费时间的干扰。如果前一个任务执行时间过长,超过后一个任务的启动时间,则后一个任务的启动时间必然要顺延。所以,这种方法,只能用于,任务短小,且对时间精度要求不高的语境。

 

简单实例:

public class TimerRun extends TimerTask
{
    int i=0;
    @Override
    public void run()
    {
        // TODO Auto-generated method stub
        ++i;
        System.out.println("运行第"+i+"次");
    
    }

}

 

 

 


public class Test
{

public static void main(String[] args)
    {
        // TODO Auto-generated method stub
       TimerTest();
    }
    private static void TimerTest()
    {
        Timer timer=new Timer();
        TimerRun timerRun=new TimerRun();
        Date date=new Date();
        long timetamp=5000;
        timer.schedule(timerRun, date, timetamp);
    }
   }

你可能感兴趣的:(java,timer,Date,String,Class,任务)