一、 什么是java定时任务调度?
- 基于给定的时间点、给定的时间间隔、给定的执行次数自动执行的任务。
二、Java中的定时调度工具
- Timer 和 Quartz两者
- Timer 和 Quartz的区别
1、Timer是JDK提供, Quartz的使用需要引入指定jar包
2、Timer完成简单的定时任务,Quartz功能强大、完善
3、Timer只有一个后台线程执行定时任务,Quartz支持多线程
三、Timer简介
java.util.Timer, 有且仅有一个后台线程对多个业务线程进行定时定频率的调度。
四、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、首次计划执行的时间早于当前的时间
2、任务执行所需时间超出任务的执行周期间隔