5

我已经阅读了博客,但我不确定他的结论是否正确:

http://www.javacodegeeks.com/2010/09/java-best-practices-queue-battle-and.html#ixzz1seaiSLwp

他说:从提供的性能结果可以看出,LinkedBlockingQueue 实现了最佳组合(添加和删除元素)性能结果,应该是您实施生产者 - 消费者方案的第一选择。

我想知道,如果我不在我的代码中使用锁定不是更快吗?

那么为什么 LinkedBlockingQueue 比无锁队列(ConcurrentLinkedQueue)快呢?

谢谢 !

4

3 回答 3

4

ConcurrentLinkedQueue 不是阻塞队列。它没有实现 BlockingQueue 接口,因此不提供阻塞方法 put() 和 take()。这些方法对于生产者/消费者设置是必要的,因为您需要安排消费者在没有任何消费时阻塞,并在消费者没有足够快的消费时让生产者阻塞。

于 2012-09-05T04:52:56.167 回答
2

这个基准很奇怪:使用并发队列作为阻塞队列没有意义,或者我错过了什么。我猜这段代码不会拯救地球:

while(result == null)
   result = concurrentLinkedQueue.poll();

当然效率低于:

linkedBlockingQueue.take();
于 2012-09-05T05:08:05.960 回答
-3

LinkedBlockingQueue 是 Deque 而 ConcurrentBlockingQueue 不是。检查 Javadoc以获取更多详细信息

于 2012-09-05T04:52:58.030 回答