【问题标题】:ArrayBlockingQueue v/s BlockingBuffer.decorate(new BoundedFifoBuffer()ArrayBlockingQueue v/s BlockingBuffer.decorate(new BoundedFifoBuffer()
【发布时间】:2014-03-18 14:48:07
【问题描述】:

(在我们的产品中找到这段代码)

我阅读了 ArrayBlockingQueue 并发现它是有界和阻塞的。 现在如果我们使用 - BlockingBuffer.decorate(new BoundedFifoBuffer() - 看起来它类似于 ArrayBlockingQueue。

请帮助了解它们是否相似或不同以及在什么情况下使用什么?

【问题讨论】:

  • org.apache.commons.collections.buffer.BlockingBuffer?

标签: java collections concurrency


【解决方案1】:

ArrayBlockingQueue 是标准库,而 BlockingBuffer / BoundedFifoBuffer 不是。如果您没有特殊原因,这将是选择ArrayBlockingQueue 的充分理由。

另一个明显的区别是Buffer 是一个集合而不是Queue,而ArrayBlockingQueue 是。如果您的用例是一个队列,那么 ArrayBlockingQueue 会更可取,因为有些库需要 Queue

最后,ArrayBlockingQueue 使用了更复杂的并发控制,所以如果它性能更好,我不会感到惊讶。

【讨论】:

  • 谢谢!在 Qs 中粘贴的代码中。已指定 Fifo(类似于队列的行为),这意味着 ArrayBlockingQueue 应优先于 BlockingBuffer / BoundedFifoBuffer。对吗?
  • 我认为除非代码使用仅在 Buffer 中可用的操作,否则您应该更喜欢 ArrayBlockingQueue
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 2016-01-22
  • 2014-08-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多