Java 什么';LinkedBlockingQueue和ConcurrentLinkedQueue之间有什么不同?
我读过博客,但我不确定他的结论是否正确: 他说:从提供的性能结果中可以看出,LinkedBlockingQueue实现了最佳组合(添加和删除元素)性能结果,应该是您实施生产者-消费者schenarios的首选人选。 我想知道,如果我不在代码中使用锁,不是更快吗 那么,为什么LinkedBlockingQueue比无锁队列(ConcurrentLinkedQueue)快呢Java 什么';LinkedBlockingQueue和ConcurrentLinkedQueue之间有什么不同?,java,java.util.concurrent,lock-free,concurrent-programming,Java,Java.util.concurrent,Lock Free,Concurrent Programming,我读过博客,但我不确定他的结论是否正确: 他说:从提供的性能结果中可以看出,LinkedBlockingQueue实现了最佳组合(添加和删除元素)性能结果,应该是您实施生产者-消费者schenarios的首选人选。 我想知道,如果我不在代码中使用锁,不是更快吗 那么,为什么LinkedBlockingQueue比无锁队列(ConcurrentLinkedQueue)快呢 谢谢 ConcurrentLinkedQueue不是阻塞队列。它不实现BlockingQueue接口,因此不提供阻塞方法pu
谢谢 ConcurrentLinkedQueue不是阻塞队列。它不实现BlockingQueue接口,因此不提供阻塞方法put()和take()。这些方法对于生产者/消费者设置是必需的,因为您需要安排消费者在无需消费时阻止,以及生产者在消费者消费速度不够快时阻止。LinkedBlockingQueue是一个Deque,而ConcurrentBlockingQueue不是。检查更多细节这个基准很奇怪:将并发队列用作阻塞队列毫无意义,或者我遗漏了什么。我想这代码不会拯救地球:
while(result == null)
result = concurrentLinkedQueue.poll();
当然,效率低于:
linkedBlockingQueue.take();
忘记随机博客吧:你考虑过阅读Javadoc吗?“bounded”、“unbounded”和“blocking”这三个词难道没有传达任何信息吗?相关:它们是两个不同的类。我不认为LInkedBlockingQueue是一个deque,我也不认为ConcurrentBlockingQueue是Java运行时中的一个类。