为什么DelayQueue不在内部使用PriorityBlockingQueue?

时间:2017-04-23 22:11:16

标签: java-8

当我阅读DelayQueue的源代码时,我认为DelayQueue只是PriorityBlockingQueue的特例,因此DelayQueue可以通过包装{内部{1}}。

所以这就是我的问题,为什么PriorityBlockingQueue内部不使用DelayQueuePriorityBlockingQueueDelayQueue之间的区别是什么?

1 个答案:

答案 0 :(得分:4)

DelayQueueBlockingQueue的实现,其元素必须实现Delayed接口,并且只能在特定时间后从Queue中删除已经过去了(延迟)。

PriorityBlockingQueueBlockingQueue的实现,其中元素的延迟不会影响其阻塞机制。 PriorityBlockingQueue中的元素根据其自然顺序排列优先级,或者传递给其中一个构造函数的Comparator

当用户在空的时候尝试轮询它们时,Queue都会阻塞,这意味着在向Queue提供元素之前程序不会继续,很可能是在另一个线程上

您还必须注意DelayQueue的元素不是通过Comparator划分优先级,而是通过使用锁和监视器。

DelayQueue 使用支持PriorityQueue,但仍需要编写自己的阻止机制,因为该实现与PriorityBlockingQueue不同(当阻塞时,会通知提供的元素,它会立即返回给调用者。)