三十一.定时器
定时器跟闹钟的功能类似,可以定义一个时间来运行一段程序,比如实时的数据检测 或者是网上各种网站视频会员都是用计时器来提醒用户。
常见的定时器有 java.util包提供的Timer定时器 和 第三方提供的quzrtz定时器
Timer定时器和quartz定时器的区别
1、Timer是java.util包自带的定时器,quartz是一个第三方提供的定时器
2、Timer的任务是通过创建TimerTask子类进行实现,quartz则必须要新建一个class文件实现Job接口重写execute方法定义任务
3、Timer只能控制执行的周期及开始时间,而quartz可以灵活、准确的控制日期节点以及执行次数
以下所有的task都是TimerTask的子类
所有time都是Date类型的日期
所有delay和period都是long类型的延迟时间, 单位为毫秒
1.timer.schedule(task, time); 在time时间执行task任务1次
2.timer.schedule(task, delay); 在延迟delay毫秒后执行task任务1次
3.timer.schedule(task, firstTime, period); 在firsttime时间执行task1次,之后定期period毫秒时间执行task, 时间如果为过去时间, 不会执行过去没有执行的任务, 但是会马上执行
4.timer.schedule(task, delay, period); 在延迟delay后执行task1次,之后定期period毫秒时间执行task, 时间如果为过去时间, 不会执行过去没有执行的任务, 但是会马上执行
1.Timer定时器演示:
4.1 创建Timer对象用于定义定时器的任务及开始时间、周期
4.2任务调度
需求:指定开始时间(开始时间为当前时间)
public static void method() {
// 1.创建Timer对象用于定义定时器的任务及开始时间、周期
Timer timer = new Timer();
// 创建匿名内部类,定义任务
TimerTask task = new TimerTask() {
int count = 1;
@Override
public void run() {
System.out.println("定时任务执行中" + (count++));
}
};
// 2.任务调度
timer.schedule(task, new Date());
}
需求:指定开始时间及执行周期(毫秒值,每秒执行一次)
public static void method2() {
// 1.创建Timer对象用于定义定时器的任务及开始时间、周期
Timer timer = new Timer();
// 创建匿名内部类,定义任务
TimerTask task = new TimerTask() {
int count = 1;
@Override
public void run() {
System.out.println("定时任务执行中" + (count++));
}
};
// 2.任务调度 毫秒值
timer.schedule(task, new Date(), 1000);
}
需求:延期执行 及执行周期(延迟4秒后执行,每秒执行一次)
public static void method3() {
// 1.创建Timer对象用于定义定时器的任务及开始时间、周期
Timer timer = new Timer();
// 创建匿名内部类,定义任务
TimerTask task = new TimerTask() {
int count = 1;
@Override
public void run() {
System.out.println("定时任务执行中" + (count++));
}
};
// 2.任务调度
timer.schedule(task, 4000, 1000);
}
2.quartz定时器
quartz使用步骤:
需要的jar下载地址:quartz
1、创建一个SchedulerFactory对象用于生产Scheduler对象 Scheduler
2、创建调度所需要的任务 JobDetail
3、指定开始的时间和执行周期 Trigger
package cn.yunhe.quartz;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzDemo {
public static void main(String[] args) throws SchedulerException {
//1.创建工厂对象,用于生产Scheduler对象
StdSchedulerFactory factory = new StdSchedulerFactory();
//2.产生Scheduler对象
Scheduler scheduler = factory.getScheduler();
scheduler.start();
//2.1创建任务(JobDetail),具体的任务需要自定义类实现Job接口
JobDetail job = JobBuilder.newJob().withIdentity("task1").build();
//2.2定义开始的时间及周期
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1").
withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)
//.withRepeatCount(3)
.repeatForever()
)
.startNow()
.build();
//3.指定要执行的任务及时间、周期
scheduler.scheduleJob(job, trigger);
}
}