quartz

理论知识:

堆:堆是一颗安全二叉树,是一种特殊的树结构,它的每一个节点值都要比父节点要么大,要么小

小顶堆:最小的值放在最上面,每个子节点都比父节点大

大顶堆:最大的值放在最上面,每个子节点都父节点小

完全二叉树:就是要求除了最后一层,其他的每一层的节点都达到最大值;

定时任务和堆有什么关系呢?

实际上每个定时任务的job都对应着堆上的一个节点,如图一个节点代表几分钟,每次取对顶元素执行,每次堆会将最小值放在最上面,这样就更快的执行,而不用去检索

堆的存储:Java中存储二叉树,一种可以选择链表,一种可以选择数组,最终选择数组存储,

        堆的插入元素:选择从尾部插入,然后上浮。

删除堆顶元素:删除只能删除对顶元素,如果需要执行就将堆顶取出,然后拿取尾部元素节点(最大的值)放置对顶,进行下沉处理

数组采用的尾插法,如果是头插法会导致所有元素的向后移动,耗费性能时间,小顶堆的特性就是每个节点的值都要比父节点值大,比较父子节点值的大小后 如果不符合就会将新值不停的向上置换,直到满足条件。

二叉树的帮我们维护的节点之间的父

时间轮算法:

一个表盘,每个时间的刻度对应一条链表,链表中存储的是需要执行的定时任务,当钟表开始转动,转动到设定时间后取出链表进行执行。但是也存在问题,如果时间扩展到年月日时分秒时候效率低下

所以引用分层时间轮,月度时间轮:记录几号开始执行,天时间轮:记录几点开始执行, 月轮遍历到了,将任务取出放到天轮中,就可以实现几号几点执行。

 corn表达式用的的就是分层时间轮。

QuartZ:

Job:真正执行的业务逻辑写在这里,是给程序员使用的添加自己的需求盒子;每个job会封装成jobDetail,我们一个job可以对应多个jobDetail.

Trigger:触发器,也就是我们定义的触发的时间。有优先级

        SimpleTrigger:循环往复的固定时间,或者固定时间间隔去执行。

        cronTrigger :按照cron表达式执行定时任务

Scheduler:调度器,基于触发器的设定执行job;

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值