• java定时任务调度-Timer(1)


    一。定义

      有且仅有一个后台线程多个业务线程进行定时定频率的调度

    二。

      Timer  ---->  Timer Task  (中有run();方法)

      通过 new Timer().schedule() 来调用 Timer Taskrun()方法

      TimerTask是一个抽象类,它的子类由 Timer 安排为一次执行或重复执行的任务。实际上就是一个拥有run方法的类

    需要定时执行的代码放到run方法体内

    Timer 是Java中util包中的方法

      

     1 Timer timer = new Timer();   
     2 // 注意javax.swing包中也有一个Timer类,如果import中用到swing包,要注意名字的冲突。   
     3 
     4 TimerTask task = new TimerTask() {   
     5     public void run() {   
     6         ... //每次需要执行的代码放到这里面。   
     7     }   
     8 };   
     9 
    10 //以下是几种常用调度task的方法:     
    11    timer.schedule(task, time);   
    12    // time为Date类型:在指定时间执行一次(不周期)。   
    13 
    14    timer.schedule(task, firstTime, period);   
    15    // firstTime为Date类型,period为long   
    16    // 从firstTime时刻开始,每隔period毫秒执行一次。   
    17 
    18    timer.schedule(task, delay) // delay 为long类型:从现在起过delay毫秒之后执行一次(不周期)
    19 --------------------------------------------------------
    20 
    21    timer.schedule(task, delay, period)   
    22    // delay为long,period为long:从现在起过delay毫秒以后,每隔period   
    23    // 毫秒执行一次。
       // 例如:从运行当前时间开始后的 2秒后开始执行,每1秒调用一次
        timer.schedule(task, 2000L, 1000L)  ; 
     

    说明::  timer.schedule(new MyTask(),long time1,long timer2);

        第一个参数,是 TimerTask 类,在包:import java.util.TimerTask .使用者要继承该类,并实现public void run() 方法,因为 TimerTask 类 实现了 Runnable 接口。

        第二个参数的意思是,当你调用该方法后,该方法必然会调用 TimerTask 类 TimerTask 类 中的 run()方法,这个参数就是这两者之间的差值,转换成汉语的意思就是说,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行run() 方法。

        第三个参数的意思就是,第一次调用之后,从第二次开始每隔多长的时间调用一次 run() 方法。

    [附:]

      技术人员在实现内部办公系统与外部网站一体化的时候,最重要的步骤就是从OA系统读取数据,并且根据网站模板生成最终的静态页面。这里就需要一个定时任务,循环的执行。

      技术人员在写定时任务的时候,想当然的以为Timer.schedule(TimerTask task, longdelay)就是重复的执行task。程序运行后发现只运行了一次,总觉得是task里的代码有问题,花了很长时间调试代码都没有结果。

      仔细研读java api,发现:

      schedule(TimerTask task, long delay)的注释:Schedules thespecified task for execution after the specifieddelay。大意是在延时delay毫秒后执行task。并没有提到重复执行

      schedule(TimerTask task, long delay, long period)的注释:Schedulesthe specified task for repeated fixed-delay execution, beginningafter the specified delay。大意是在延时delay毫秒后重复的执行task,周期是period毫秒。

      这样问题就很明确schedule(TimerTask task, longdelay)只执行一次,schedule(TimerTask task, long delay, longperiod)才是重复的执行。关键的问题在于程序员误以为schedule就是重复的执行,而没有仔细的研究API,一方面也是英文能力不够,浏览API的过程中不能很快的理解到含义。

      

  • 相关阅读:
    检查SQL Server 2005的索引密度和碎片信息(转)
    数据库系统异常排查之DMV(转)
    sql server性能分析--执行sql次数和逻辑次数
    sql语句优化
    C#获取文件夹下的所有文件的文件名
    siebel学习笔记-应用/数据访问控制
    FlexPaper实现文档在线浏览(附源码)
    C# Process.WaitForExit()与死锁
    前端网站
    微信小程序
  • 原文地址:https://www.cnblogs.com/hanxue53/p/8464714.html
Copyright © 2020-2023  润新知