DelayQueue延时队列的使用
来源:互联网 发布:小米网络劫持怎么解决 编辑:程序博客网 时间:2024/06/05 06:35
在谈到DelayQueue的使用和原理的时候,我们首先介绍一下DelayQueue,DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed 元素。
DelayQueue阻塞队列在我们系统开发中也常常会用到,例如:缓存系统的设计,缓存中的对象,超过了空闲时间,需要从缓存中移出;任务调度系统,能够准确的把握任务的执行时间。我们可能需要通过线程处理很多时间上要求很严格的数据,如果使用普通的线程,我们就需要遍历所有的对象,一个一个的检查看数据是否过期等,首先这样在执行上的效率不会太高,其次就是这种设计的风格也大大的影响了数据的精度。一个需要12:00点执行的任务可能12:01才执行,这样对数据要求很高的系统有更大的弊端。由此我们可以使用DelayQueue。
延迟堵塞队列的实现原理类似于TimerTask。下面假设对超过一定时间的问题的状态修改为实现目标来完成。首先我们利用普通线程对n个问题,然后比对问题的创建时间和现在的时间比较然后来修改问题的状态:
- 我们可以定时的每两分钟查看一次数据对过期的问题的状态进行修改,很显然这种情况对数据的准确性把握不够,其次是不断的查询数据库效率问题。
- 将问题放在普通的队列中,这种情况需要我们不断的遍历改队列达到修改状态的功能。DelayQueue可以很好的完成这样的工作。
1.首先创建一个Task类,要求实现Delayed,这点类似于TimerTask。设置成员变量“到期时间”,“以及问题对象”并创建构造方法 如下:
2.创建Job类,该类用于执行Task,在这里申明一个线程,该线程用于用队列中取出Task,并将过期的问题状态修改。DelayQueue类的take()方法用于获取并移除此队列的头部,在可从此队列获得到期延迟的元素之前一直等待。如果Task中timeout大于当前的时间则可以通过take()取出到期的对象,如果没有则该队列一直等待。
3.创建延迟队列将Task加入到延迟队列中,如下:
4.测试,检验延迟队列是否可以正常运行。
(转载自:http://express.ruanko.com/ruanko-express_69/tech-overnight5.html)
欢迎加入我的QQ技术交流群425783133
阅读全文
0 0
- DelayQueue延时队列的使用
- DelayQueue延时队列的使用
- DelayQueue延时队列操作实例
- 延迟队列DelayQueue的使用示例
- 进阶篇:延时队列之DelayQueue(十四)
- DelayQueue 实现延时消息队列实践
- delayQueue延时队列-模拟简易MQ
- 利用DelayQueue实现延时消息队列(简易版MQ)
- 利用DelayQueue实现延时消息队列(简易版MQ)
- 利用DelayQueue实现延时消息队列(简易版MQ)
- DelayQueue的简单使用
- DelayQueue的使用
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- DelayQueue 队列
- java延时队列使用
- 经典数据结构和算法
- 最短路之Bellman-Ford算法
- Android 7.0 Launcher3 去掉应用抽屉
- linux网络编程 socket
- 读(深入浅出ES6)系列笔记(二)
- DelayQueue延时队列的使用
- python基础教程学习记录
- Liferay7.0开发学习(一):开发环境搭建
- Vue给单独页面添加背景色
- 港湾
- 【js】点击网页的文字变成input内的文字并且选中文字方便复制
- Hive开发错误记录
- 数据库自动化运维平台--自助权限申请
- 解决Android Studio报错误:Conflict with dependency 'com.google.code.findbugs:jsr305'