• Java的定时调度


      一般在web开发中定时调度比较有用,因为要维护一个容器不关闭才可以一直定时操作下去。

      定时调度:每当一段时间之后,程序就会自动执行,就称为定时调度。如果要使用定时调动,则必须要保证程序要始终运行着,也就是说定时调度是在程序之外又启动了一个新的线程。

      完成定时调度需要TimerTimerTask类的支持

    Timer类:

    • l Timer类是一种线程设施,可以是现在某一时间或某一时间后,安排某一任务执行一次,或定期重复执行。给功能要与TimerTask类结合使用。TimerTask类用来实现由Timer类安排的一次或重复执行的某一任务。
    • 每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则会延迟后续任务的执行,而这些后续的任务可能堆在一起,等到该任务完成后快速迅速执行。

       

    schedule()scheduleAtFixedRate()方法的区别:

    两者区别在于重复执行任务时,对于时间间隔出现延迟的情况的处理:

    • l schedule()方法的执行时间间隔是固定的,如果之前出现了延迟的情况,之后也会继续按照指定的时间间隔来执行;
    • l scheduleAtFixedRate()方法可以根据出现的延迟时间自动调整下一次间隔的执行时间。

    TimerTask类:

      要想执行具体的任务,则必须使用TimerTask类。TimerTask类是一个抽象类,如果要使用此类,需要自己建立一个类继承此类,并实现其中的抽象方法。

       

    按照此概念,完成一个时间调度程序,每隔2秒打印一次时间。

    定义一个类基础TimerTask类,完成具体的任务。

     1 import java.text.SimpleDateFormat;
     2 import java.util.Date;
     3 import java.util.TimerTask;
     4 
     5 public class MyTask extends TimerTask{  //任务调度类都要继承此类
     6     @Override
     7     public void run() {  //完成具体的任务
     8         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
     9         System.out.println("当前系统时间:"+sdf.format(new Date()));
    10     }    
    11 }

    完成的是一个具体的任务操作类,以后定调度调的就是此类中的run()方法。

    1 public class TestTimerTask {   //测试类
    2     public static void main(String args[]){
    3         Timer t = new Timer();  //建立Timer对象
    4         MyTask mt = new MyTask();  //定义任务
    5         t.schedule(mt, 1000,2000); //设置任务的执行,1秒后开始,每2秒执行一次
    6     }
    7 }

     

  • 相关阅读:
    抽奖概率算法
    redis启动异常
    php如何快速读取大文件
    nginx反向代理解决跨域
    sublime修改侧边栏字体
    curl
    公众号开发一
    数组
    在windows下用vagrant建立lnmp开发环境
    gets--vs--fgets
  • 原文地址:https://www.cnblogs.com/mzct123/p/8290263.html
Copyright © 2020-2023  润新知