欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

定时任务框架——Quartz

程序员文章站 2024-03-22 11:58:58
...

Quartz:由Java实现的任务调度框架。可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。
Quartz使用:
1.创建任务调度控制器

Scheduler scheduler= new StdSchedulerFactory().getScheduler();

2.创建任务实现逻辑类Job(只需要实现Job接口execute()为任务实现)

public class JobTask implements Job{

	@Override
	public void execute(JobExecutionContext arg) throws JobExecutionException {
	}
}
  1. 定义任务描述类JobDetail
        JobDetail job = new JobDetail();
		job.setName("任务”); //为任务起一个名称
		job.setJobClass(new JobTask () );
  1. 运行任务
    定义一个触发器Trigger(SimpleTrigger、CronTrigger、DataIntervalTrigger和NthIncludedTrigger),trigger状态:WAITING,ACQUIRED,EXECUTING,COMPLETE,BLOCKED,ERROR,PAUSED,PAUSED_BLOCKED,DELETED。
    规定任务的执行策略(包括名称、开始时间、结束时间、重复执行次数、执行间隔)
   Trigger trigger =  new SimpleTrigger(config.getName(), null,
						startDate.getTime(), null,
						SimpleTrigger.REPEAT_INDEFINITELY,
						periodTime * 60 * 1000L);
//调用任务执行类执行任务
		scheduler.deleteJob(job.getName(), Scheduler.DEFAULT_GROUP);
		scheduler.scheduleJob(job, trigger);

Quartz实现原理:
主要组成部分:

scheduler(调度器):将job和trigger绑定在一起

job(任务) :配置具体哪个类实现定时任务

trigger(触发器) :配置定时器参数,如:多久执行一次,执行多上次等

定时任务框架——Quartz

Quartz工作原理

分两类线程:

Scheduler调度线程
任务执行线程

原理

   执行常规调度的线程,常规调度线程轮询存储的所有trigger,如果有trigger到达了下一次触发的时间(用wait和notifyAll实现),则从任务执行线程池获取一个空闲线程,执行与该trigger关联的任务。

定时任务框架——Quartz

Scheduler调度线程主要有两个:

执行常规调度的线程
执行misfiredtrigger的线程,Misfire线程是扫描所有的trigger,查看是否有misfiredtrigger,如果有的话根据misfire的策略分别处理(fire now OR wait for the next fire)。

相关标签: IT