有界PriorityBlockingQueue

nan*_*nda 16 java collections priority-queue

PriorityBlockingQueue是无限的,但我需要以某种方式约束它.实现这一目标的最佳方法是什么?

有关信息,有界PriorityBlockingQueue将用于a ThreadPoolExecutor.

注意:通过有界我不想抛出异常,如果发生这种情况,我想将对象放入队列中,然后根据其优先级值进行剪切.有什么好方法可以做这件事吗?

Fra*_*k V 12

我实际上不会将它子类化.虽然我现在无法将示例代码放在一起,但我建议使用装饰模式的一个版本.

创建一个新类并实现您感兴趣的类实现的接口:PriorityBlockingQueue.我发现这个类使用了以下接口:

Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
Run Code Online (Sandbox Code Playgroud)

在类的构造函数中,接受a PriorityBlockingQueue作为构造函数参数.

然后通过实例实现接口所需的所有方法PriorityblockingQueue.添加使其成为有界所需的任何代码.

这是我在Violet UML中放在一起的快速图表:

BoundedPriorityblockingQueue类图http://theopensourceu.com/wp-content/uploads/2010/03/BoundedPriorityBlockingQueue.png

  • 图片网址现已损坏. (2认同)

res*_*dsk 5

Google Collections/Guava库中有一个实现:MinMaxPriorityQueue.

可以使用最大大小配置最小 - 最大优先级队列.如果是这样,每次队列的大小超过该值时,队列将根据其比较器(可能是刚刚添加的元素)自动删除其最大元素.这与传统的有界队列不同,传统的有界队列在满时阻止或拒绝新元素.

  • MinMaxPriorityQueue不是线程安全的. (6认同)