zoukankan      html  css  js  c++  java
  • 使用Timer执行定时任务

    一、Timer概述

    在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现。

    二、Timer介绍

    Timer是一个定时器类,通过该类可以为指定的定时任务进行配置,所在jar包路径:java.util.TimerTimer定时器实例有多种构造方法:Timer()// 创建一个新计时器Timer(boolean isDaemon)//创建一个新计时器,可以指定其相关的线程作为守护程序运行Timer(String name)//创建一个新计时器,其相关的线程具有指定的名称Timer(String name,boolean isDaemon)//创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,所在jar包路径:java.util.TimerTask// 可以通过继承该类,来实现自己的定时任务。publicabstractclassTimerTaskimplementsRunnable
    
    

    三、Timer常用方法

    在特定时间执行任务,只执行一次
    public void schedule(TimerTask task,Date time)
    在特定时间之后执行任务,只执行一次
    public void schedule(TimerTask task, long delay)
    指定第一次执行的时间,然后按照间隔时间,重复执行
    public void schedule(TimerTask task, Date firstTime, long period)
    在特定延迟之后第一次执行,然后按照间隔时间,重复执行

    publicvoid schedule(TimerTask task,long delay,long period)/*参数说明
     delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行
     period:重复执行的时间间隔
    */
    
    

    第一次执行之后,特定频率执行,与3效果相同

    publicvoid scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
    
    

    在delay毫秒之后第一次执行,后按照特定频率执行

    publicvoid scheduleAtFixedRate(TimerTask task,long delay,long period)
    
    

    Timer注销

    timer.cancel();
    
    

    schedule()和scheduleAtFixedRate()的区别

    schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次
    scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务
    四、Timer使用示例

    使用Timer每隔2秒打印一次数据,并且任务在Timer启动1秒之后开始

    import java.util.Timer;import java.util.TimerTask;publicclassTestTimer{publicstaticvoid main(String[] args){Timer timer =newTimer();
            timer.schedule(newMyTask(),1000,2000);}}classMyTaskextendsTimerTask{@Overridepublicvoid run(){System.out.println("每隔2秒我就出现一次……");}}
    
    

    使用Timer每隔一段时间随机生成数字

    import java.util.Timer;import java.util.Random;import java.util.TimerTask;publicclassTimerTest{publicstaticvoid main(String[] args){Timer timer =newTimer();NewTimerTask timerTask =newNewTimerTask();//程序运行后立刻执行任务,每隔100ms执行一次
            timer.schedule(timerTask,0,100);}}classNewTimerTaskextendsTimerTask{@Overridepublicvoid run(){
            createRandomNumber();
            createRandomNumberFromMathRandom();}//用纯Math中的方法来随机生成1-10之间的随机数privatevoid createRandomNumberFromMathRandom(){int j =(int)(Math.round(Math.random()*10+1));System.out.println("随机生成的数字为:"+j);}//用Random类的方式来随机生成1-10之间的随机数privatevoid createRandomNumber(){Random random =newRandom(System.currentTimeMillis());int value = random.nextInt();
             value =Math.abs(value);
             value = value%10+1;System.out.println("新生成的数字为:"+ value);}}
    
    

    五、小结

    通过上面的两个简单示例,我们可以很清楚的知道Timer的用法:

     
    实现TimerTask接口,并即为单元任务,我们的单次运行业务逻辑写在这里面
    实例化一个Timer对象,用于启动TimerTask任务,并通过调用不同的方法设置任务的执行时间、频率
    在实际的应用中,Timer多用于在夜间处理比较耗时并且数据状态稳定时候的一些后台操作,例如数据统计、数据备份等。 
  • 相关阅读:
    uva 1605 building for UN ——yhx
    uva 120 stacks of flapjacks ——yhx
    uva133-S.B.S.
    Uva10082 WERTYU -S.B.S.
    Quicksum-S.B.S.
    NOIP2014提高组 DAY1 -SilverN
    NOIP2013普及组 -SilverN
    uva 1354 Mobile Computing ——yhx
    UVa 11292 Dragon of Loowater
    UVa 839 Not so Mobile
  • 原文地址:https://www.cnblogs.com/krislight1105/p/5092699.html
Copyright © 2011-2022 走看看