我是靠谱客的博主 耍酷网络,最近开发中收集的这篇文章主要介绍quartz原理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

quartz是目前比较流行的开源定时调度框架,功能强大,使用方便。


核心概念:

Job:要执行的内容,有execute()接口

JobDetail:可执行的调度程序,执行内容是Job

Trigger:定时调度策略

Scheduler:调度容器,可以注册多个JobDetail和Trigger


样例:

public class MyJob implements Job { 
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 
                System.out.println(new Date() + ": doing something..."); 
        } 


class Test { 
        public static void main(String[] args) { 
                //1、创建JobDetial对象 
                JobDetail jobDetail = new JobDetail(); 
                //设置工作项 
                jobDetail.setJobClass(MyJob.class); 
                jobDetail.setName("MyJob_1"); 
                jobDetail.setGroup("JobGroup_1"); 

                //2、创建Trigger对象 
                SimpleTrigger strigger = new SimpleTrigger(); 
                strigger.setName("Trigger_1"); 
                strigger.setGroup("Trigger_Group_1"); 
                strigger.setStartTime(new Date()); 
                //设置重复停止时间,并销毁该Trigger对象 
                java.util.Calendar c = java.util.Calendar.getInstance(); 
                c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L); 
                strigger.setEndTime(c.getTime()); 
                strigger.setFireInstanceId("Trigger_1_id_001"); 
                //设置重复间隔时间 
                strigger.setRepeatInterval(1000 * 1L); 
                //设置重复执行次数 
                strigger.setRepeatCount(3); 

                //3、创建Scheduler对象,并配置JobDetail和Trigger对象 
                SchedulerFactory sf = new StdSchedulerFactory(); 
                Scheduler scheduler = null
                try { 
                        scheduler = sf.getScheduler(); 
                        scheduler.scheduleJob(jobDetail, strigger); 
                        //4、并执行启动、关闭等操作 
                        scheduler.start(); 

                } catch (SchedulerException e) { 
                        e.printStackTrace(); 
                } 
//                try { 
//                        //关闭调度器 
//                        scheduler.shutdown(true); 
//                } catch (SchedulerException e) { 
//                        e.printStackTrace(); 
//                } 
        } 
}



当scheduler容器启动后,jobDetail才能根据关联的trigger策略去执行。当scheduler容器关闭后,所有的jobDetail都停止执行。
 

scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。

scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率


Quartz有一个专门的调度线程对任务进行管理,任务执行有另外专门的线程池


Quartz定时器原理:

ThreadExecutor启动该线程对象。该线程就是调度线程,主要任务就是不停的从JobStore中获取即将被触发的触发器(默认30s调度一次)。在这个时候调度线程虽然启动,但是处于pause状态。


client通过scheduleJob()方法将任务和触发器存储在JobStore中,通过start()方法将QuartzSchedulerThread的pause状态设为false,通知调度线程执行任务,此后调度线程不停的从JobStore中去取即将触发的任务。


QuartzSchedulerThread调度线程通过while死循环轮询满足条件的trigger,将满足的trigger对应的job添加进workThread线程池进行新线程运行。



最后

以上就是耍酷网络为你收集整理的quartz原理的全部内容,希望文章能够帮你解决quartz原理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部