【发布时间】:2013-08-22 08:33:33
【问题描述】:
- 什么情况下最好使用 ArrayBlockingQueue,什么时候最好使用 LinkedBlockingQueue?
- 如果 LinkedBlockingQueue 默认容量等于 MAX Integer,那么将其用作具有默认容量的 BlockingQueue 真的有帮助吗?
【问题讨论】:
-
对于第 1 点,我想这与 ArrayList 与 LinkedList 的原因完全相同;)
-
A BlockingQueue 不仅在 put() 上阻塞。当队列为空时,它还会阻塞 take()。
-
@sp00m 但在队列中我们没有插入或删除之间的时间。所以没有像 ArrayList 和 LinkedList 那样的性能问题
-
@user2375176 我认为如果您可以估计队列的大小,那么 ArrayBlockingQueue 会更好。但是如果添加率变高,那么它会阻塞并减少对象通过
-
@JBNizet 实际上,您可以在基于数组的实现中使用开始和结束偏移量。当开始偏移量大于结束偏移量时,元素必须读取数组边界周围的环绕。所以在前面插入一个元素可以通过将它存储在数组的末尾并调整开始偏移量而不需要移位来完成。
标签: java blockingqueue blockingcollection