定时器
定时器
常见的定时器分两大块:
1、Timer 在java.util包中提供的定时器
2、quartz 第三方提供的
定时器就像日常生活中使用的闹钟,指定一个时间,按时间周期性执行
package cn.yunhe.timer;
import java.text.ParseException;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerDemo {
public static void main(String[] args) throws ParseException {
//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, 2000, 1000);
}
/**
* 指定开始时间及执行周期
*/
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);
}
/**
* 指定开始时间
*/
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());
}
}
quartz
quartz的使用步骤如下:
1、创建一个SchedulerFactory对象用于生产Scheduler对象 Scheduler
2、创建调度所需要的任务 JobDetail
3、指定开始的时间和执行周期 Trigger
package cn.yunhe.quartz;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class Task implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("定时器中的任务");
}
}
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(Task.class).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);
}
}
Timer和Quartz的区别
1、Timer是java.util包自带的定时器,quartz是一个第三方提供的定时器
2、Timer的任务是通过创建TimerTask子类进行实现,quartz则必须要新建一个class文件实现Job接口重写execute方法定义任务
3、Timer只能控制执行的周期及开始时间,而quartz可以灵活、准确的控制日期节点以及执行次数