Java的定时任务调度工具Timer

一、 什么是java定时任务调度?
  • 基于给定的时间点、给定的时间间隔、给定的执行次数自动执行的任务。
二、Java中的定时调度工具
  • Timer 和 Quartz两者
  • Timer 和 Quartz的区别
    1、Timer是JDK提供, Quartz的使用需要引入指定jar包
    2、Timer完成简单的定时任务,Quartz功能强大、完善
    3、Timer只有一个后台线程执行定时任务,Quartz支持多线程
三、Timer简介

java.util.Timer, 有且仅有一个后台线程对多个业务线程进行定时定频率的调度。

主要构建.png

类.png
四、Timer实例

1、 创建Task类,继承于TimerTask,重写run方法

public class MyTimerTask extends TimerTask {

    private  String name;
    public MyTimerTask(String inputName){
        name = inputName;
    }

    @Override
    public void run(){

        System.out.println("current exec name is:" + name);

    }

//要访问私有属性,需要给定set、get方法
    public String getName(){

        return name;
    }

    public void setName(String name){

        this.name = name;
    }

}

2、利用Timer对象,设置定时任务

//1、创建一个timer实例
Timer timer = new Timer();

//2、创建MyTimerTask一个实例
MyTimerTask myTimerTask = new MyTimerTask("No.1");

//3、通过timer定时定频率调用myTimerTask的业务逻辑
//参数一:指定任务类对象
//参数二:当前时间之后的多久开始执行
//参数三:间隔时间
timer.schedule(myTimerTask, 2000L, 1000L);

五、schedule的四种用法
/***** schedule 第一种用法 ******/
        //设置定时任务,指定3S之后的"时间"执行定时任务
        //myTimerTask.setName("sechedule1");
        //timer.schedule(myTimerTask,calendar.getTime());


/***** schedule 第二种用法 ******/
        //时间等于或超过time时,首次执行task,之后每隔period毫秒重复执行一次task
        //timer.schedule(myTimerTask, calendar.getTime(),2000);


/***** schedule 第三种用法 ******/
        //等待delay毫秒之后执行且仅执行一次task
        //timer.schedule(myTimerTask, 2000);

/***** schedule 第四种用法 ******/
        //等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task
        timer.schedule(myTimerTask, 1000, 2000);

六、scheduleAtFixedRate的用法
/***** scheduleAtFixedRate 第一种用法 ******/
        //时间等于或超过time首次执行task, 之后每个period毫秒重复执行一次task
        //timer.scheduleAtFixedRate(myTimerTask,calendar.getTime(), 2000);


/***** scheduleAtFixedRate 第二种用法 ******/
        //等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task
        timer.scheduleAtFixedRate(myTimerTask,3000, 2000);

七、Timer的重要函数

*TimerTask的两个重要函数

cancle()
作用: 取消当前TimeTask里的任务
scheduledExecutionTime()
作用:返回此任务最近实际执行的已安排执行的时间(最近此任务执行时间 long)

*Timer的两个重要函数

cancle()
作用:终止此计时器,丢弃所有当前已安排任务
purge()
作用:从此计时器的任务队列中移除所有已取消的任务(返回值: 从队列中移除的任务数)

八、两种情况看schedule和scheduleAtFixedRate的区别

1、首次计划执行的时间早于当前的时间

schedule.png

schedule运行结果.png

scheduleAtFixedRate.png

scheduleAtFixedRate运行结果.png

2、任务执行所需时间超出任务的执行周期间隔

schedule.png

scheduleAtFixedRate.png

推荐阅读更多精彩内容