• 使用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多用于在夜间处理比较耗时并且数据状态稳定时候的一些后台操作,例如数据统计、数据备份等。 
  • 相关阅读:
    CSS媒体查询
    重新认识caniuse
    范仁义css3课程---40、box-sizing属性实例
    前端超级实用技巧---2、css、js兼容性查询网站can i use
    日常英语---200221(shrink)
    心得体悟帖---200221(方针:进可攻退可守的方式:先把不熟悉的知识点录)
    心得体悟帖---200221(本来二月份就到了三月之期的)
    心得体悟帖---200220(对不同的人,用不同的处理方式(这个你远远没有理解))
    java中的String.format使用
    android中的ellipsize设置(省略号的问题)
  • 原文地址:https://www.cnblogs.com/krislight1105/p/5092699.html
Copyright © 2020-2023  润新知