20150817---成长日记1---DelayQueue&&Delayed&&Other

今天第一次接触DelayQueue,源于项目中的话单解析入库的拆分线程中引入,首先简单了解一下DelayQueue:

DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的Delayed 元素。

问题1:如何来判断延迟期是否满了呢?   ----后面解答,下面继续。

DelayQueue阻塞队列在我们系统开发中也常常会用到,例如:缓存系统的设计,缓存中的对象,超过了空闲时间,需要从缓存中移出;任务调度系统,能够准确的把握任务的执行时间。我们可能需要通过线程处理很多时间上要求很严格的数据,如果使用普通的线程,我们就需要遍历所有的对象,一个一个的检查看数据是否过期等,首先这样在执行上的效率不会太高,其次就是这种设计的风格也大大的影响了数据的精度。一个需要12:00点执行的任务可能12:01才执行,这样对数据要求很高的系统有更大的弊端。由此我们可以使用DelayQueue。

DelayQueue队列中保存的是实现了Delayed接口的实现类,里面必须实现getDelay()和compareTo()方法,前者用于取DelayQueue里面的元素时判断是否到了延时时间,否则不予获取,是则获取。  compareTo()方法用于进行队列内部的排序。

    ------ 解答了第一个问题。

getDelay(TimeUnit unit){

return unit.convert(time - now(),TimeUnit.NANOSECONDES);//time为设定的间隔时间

}

compareTo(Object object){

if(object instanceof SchuduledTask){

SchuduledTask task = (SchuduledTask) object ;

long l = this.time - task.time;

if(l > 0) return 1 ; //比当前的小则返回1,比当前的大则返回-1,否则为0

else if(l < 0 ) return -1;

else return 0;

}

}

其他关联知识点:

System.currentTimeMillis返回的是从1970.1.1 UTC 零点开始到现在的时间,精确到毫秒,平时我们可以根据System.currentTimeMillis来计算当前日期,星期几等,可以方便的与Date进行转换

System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期返回最准确的可用系统计时器的当前值

java 之DelayQueue实际运用示例  参考:http://www.cnblogs.com/sunzhenchao/p/3515085.html

参考的相关资料,再次说明:

DelayQueue的原理和使用浅谈:http://express.ruanko.com/ruanko-express_69/tech-overnight5.html

DelayQueue队列研究:http://blog.csdn.net/flyingpig4/article/details/6043128

精巧好用的DelayQueue:http://www.cnblogs.com/jobs/archive/2007/04/27/730255.html

System.nanoTime与System.currentTimeMillis的区别:http://blog.csdn.net/dliyuedong/article/details/8806868

System.nanoTime() 的隐患:http://hold-on.iteye.com/blog/1943436

TimeUnit:http://blog.csdn.net/hudashi/article/details/6936604

时间: 2024-10-14 01:27:24

20150817---成长日记1---DelayQueue&&Delayed&&Other的相关文章

scrapy爬虫成长日记之将抓取内容写入mysql数据库

前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我们日常的实际应用,接下来看下如何将抓取的内容保存在常见的mysql数据库中吧. 说明:所有的操作都是在“scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据”的基础上完成,如果您错过了这篇文章可以移步这里查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 环

java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用

CVS服务端的配置和基本使用 在做java自动化测试集成环境搭建的时候,无论怎样,你都会选择一个源代码管理工具,如:SVN,CVS,VSS等:但如果你使用Eclipse工具,建议你使用CVS源代码管理工具,因为它本身就自带了CVS客户端插件,可以直接使用(具体使用情况,可参考:java自动化测试成长日记-之CVS客户端和服务端安装和部署2:CVS客户端的配置和基本使用章节): 首先,你需要下载:cvsnt-2.5.03.2151安装包.msi,服务端安装软件(可在百度里面搜索找到,相应的资源).

网络工程师成长日记076-如何成为网络工程师中的高手

这是我的第076篇原创文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 首先,所有最重要的就是你要有坚定不移的信念学习网络工程师 相信你自己完全可以做到这是所有的重中之重,因为如果你没有信心,用什么方法都很难,我写的这些也都成了废话. 根据自己从事网络工程师行业,也从事过网络工程司培训,一共十五年从业的时间,曾经在外企,在世界五百强,在中小型企业都待过,我接触过大量的优秀的工程师,带过大量的,中国移动,中国电信,中国联通的技术员工,也培养过很多的大学生,所以我把培训的最有效的一些方法总结

网络工程师成长日记306-西安保时捷项目实习感想

这是网络工程师成长日记的第306篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 前几天接到老大的通知,星期一要去北二环的保时捷,做一个打环测试的项目.听到打环,比较陌生,经过尹Sir的讲解还有在网上查了些资料,大概有了些了解.但是毕竟还是没有做过,总有点心虚. 星期一早上9点,我们准时来到了客户所在地点,锦园新世纪保时捷展示店,还没走进大门,就看到一辆保时捷cayman跑车停在玻璃门后,好家伙,快100万啊.来不及细看,进去和客户介绍自己,表明来意.前台女孩很漂亮但不太热情,告诉

网络工程师成长日记330-西安壳牌项目实习

这是网络工程师成长日记的第330篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 昨天接到通知,说今天会去做个项目,公司的名称是壳牌公司,工程的目的是安装新的路由器目的是使北京的总公司能访问西安的分公司. 当然还是跟往常一样,总共是3个人,由很牛的人带队哦.也许项目做多了,也没有像前几次那么紧张,就好像是完成一件很简单的事情,享受那份做工程的快乐.今天坐车去工程现场,路线是昨天查了好长时间才确定的还好我比较幸运,坐的那辆公交车离工作现场比较近,一下车马路对面就是.下车之后,看到了一

网络工程师成长日记315-汉中某银行技术支持

这是网络工程师成长日记的第315篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 9/10随同老大到汉中市人民银行总行,对网络故障进行排查主要是核心交换机上的VRRP热备份冗余出现不稳定状态,核心交换机光模块上的23/24口不停的出现UP/Down时间紧迫,第2天早上,我们很早来到银行的机房,由于银行有重要的业务流量,只能对3层交换做一些简单查看,要对交换机问题进行仔细的排查,还需要等到晚上工作人员都下班后,这样我们先通过网管进行了解,问题的关键所在. 我们来到机房后,老大首先是对

网络工程师成长日记316-宝鸡冀东水泥厂技术支持

这是网络工程师成长日记的第316篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 这是第一次在老大带领下去较远的地方做工程,对于此次宝鸡之行我觉得收获颇多.出发前在听到去宝鸡冀东水泥公司调试的是华为设备,由于之前没有接触到华为的设备,出发前我还是比较担心,同时也有些紧张.经过长时间的车程,最终到达冀东水泥宝鸡凤翔分公司. 到达现场后,老大很快就和赵师傅处了解施工方的情况.以及我们到达机房所要做的事,并认真考虑配置方法.从开始我就有一些紧张,期间老大也多次与赵师傅讨论施工策略,并带领

网络工程师成长日记322-阿克苏诺贝尔油漆苏州公司西安分公司工程回忆录

这是网络工程师成长日记的第322篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 今天和老大去阿克苏诺贝尔油漆苏州公司西安分公司做个技术支持,比较激动,老大让我写个回忆录给大家看看踏进公司的大门时,有点紧张和激动,这毕竟是第一次做工程--一位漂亮的行政秘书对我们很热情,让我们坐,给我们拿报纸--使我的心情平静了下来.坐下来才发现公司的布置还是有点品位的,装饰的也不俗套,后来才知道是500强企业.(图1-办公环境) (图2-机架) 第一步:通过与行政小秘书的沟通了解我们要做的内容--

网络工程师成长日记323-富平县统计局内网故障处理一日回忆录

这是网络工程师成长日记的第323篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 13号,在和同学们喝完数斤太白酒后,我不禁疲态大发,就在这时,老大一通电话把我打醒--去富平县做项目.乖乖,这可是第一回去做项目啊于是我不辞艰辛,不蔽风雨,连夜带齐书本赶回家中挑灯夜读--怕去富平以后知识掌握不牢,给人砸锅去了. 但是只看一晚上怎么够,于是大清早天一亮,便怀揣着一颗忐忑不安的心来到公司.不想老大又宣讲了一下要求和细节,瞬时内心更是怕得不得了,当时就有点想装死不去了的感觉但最终糊里糊涂,

网络工程师成长日记325-红牛西安工程回忆录

这是网络工程师成长日记的第325篇连载文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 红牛全国组网项目感想也许是幸运,也许是补偿吧!昨天在房地产公司的项目特让人郁闷,毕竟机房的面积太小,以至于我们有进去,也没有动手,反而耗费了五个小时的时间回来后还发现有人将我用的电脑重启了,我写的文档丢了,真是气不打一处出啊!正在和他们闲聊的时候老大跟刘工说明天继续做项目,我来劲了,当即找老大说明今天的情况申请明天继续跟项目,没想到居然得到了批准 得知客户公司地址的时候又是一阵欢喜,在我租的房子的对面