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/
转载文章受原作者版权保护。转载请注明原作者出处!