DelayQueue详解

DelayQueue介绍

【1】DelayQueue 是一个支持延时获取元素的阻塞队列, 内部采用优先队列 PriorityQueue 存储元素,同时元素必须实现 Delayed 接口;在创建元素时可以指定多久才可以从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。延迟队列的特点是:不是先进先出,而是会按照延迟时间的长短来排序,下一个即将执行的任务会排到队列的最前面。注意:不能将null元素放置到这种队列中。

DelayQueue使用

DelayQueue的源码分析

【1】继承关系分析

【2】属性值

【3】构造函数

【4】核心方法分析

1)入队put方法

2)出队take方法

DelayQueue总结

【1】一个使用优先级队列实现的无界阻塞队列

【2】数据结构:PriorityQueue(与PriorityBlockingQueue类似,不过没有阻塞功能)

【3】阻塞对象:Condition available

【4】锁:ReentrantLock

【5】入队:不阻塞,无界队列,与优先级队列入队相同,available

【6】出队:1.为空时阻塞 ,2.检查堆顶元素过期时间【小于等于0则出队,大于0,说明没过期,则阻塞(判断leader线程是否为空【为了保证优先级】,不为空(已有线程阻塞),直接阻塞。为空,则将当前线程置为leader,并按照过期时间进行阻塞)】

【7】应用场景(只能说适用,但一般不会用这个):

1.商城订单超时关闭:淘宝订单业务:下单之后如果三十分钟之内没有付款就自动取消订单

2.异步短信通知功能:饿了么订餐通知:下单成功后60s之后给用户发送短信通知。

3.关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭。

4.缓存过期清除。缓存中的对象,超过了存活时间,需要从缓存中移出。

5.任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求等。

Original: https://www.cnblogs.com/chafry/p/16783225.html
Author: 忧愁的chafry
Title: DelayQueue详解

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/712604/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球