`
xinklabi
  • 浏览: 1560318 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

DelayQueue (ScheduledThreadPoolExecutor调度的实现)

    博客分类:
  • Java
 
阅读更多

    使用实现ScheduledThreadPoolExecutorTimer(定时线程池)将会有各种各样的问题(可以参考《JAVA并发编程实践》第6.2章节),ScheduledThreadPoolExecutorTimer使用了DelayQueue来进行调度,它是BlockingQueue的实现,你也可以使用它来进行构建自己的定时任务调度框架。

    DelayQueue管理着一个包含Delayed对象的容器,每个Delayed对象都与一个延迟时间相关联,只有在元素过期后,DelayQueue才让你能执行take操作获取元素。从DelayQueue中返回的对象将依据它们所延迟的时间进行排序。

 

public class DelayQueue<E extends Delayed>extends AbstractQueue<E>implements BlockingQueue<E>

 

Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部 是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且 poll 将返回 null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于等于 0 的值时,将发生到期。即使无法使用 takepoll 移除未到期的元素,也不会将这些元素作为正常元素对待。例如,size 方法同时返回到期和未到期元素的计数。此队列不允许使用 null 元素。  

分享到:
评论
1 楼 乱在长安 2015-08-07  
使用Timer会有各种各样的问题好嘛?!书上推荐使用ScheduledThreadPoolExecutor!

相关推荐

Global site tag (gtag.js) - Google Analytics