Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';LinkedBlockingQueue和ConcurrentLinkedQueue之间有什么不同?_Java_Java.util.concurrent_Lock Free_Concurrent Programming - Fatal编程技术网

Java 什么';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

我读过博客,但我不确定他的结论是否正确:

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

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

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


谢谢

ConcurrentLinkedQueue不是阻塞队列。它不实现BlockingQueue接口,因此不提供阻塞方法put()和take()。这些方法对于生产者/消费者设置是必需的,因为您需要安排消费者在无需消费时阻止,以及生产者在消费者消费速度不够快时阻止。

LinkedBlockingQueue是一个Deque,而ConcurrentBlockingQueue不是。检查更多细节

这个基准很奇怪:将并发队列用作阻塞队列毫无意义,或者我遗漏了什么。我想这代码不会拯救地球:

while(result == null)
   result = concurrentLinkedQueue.poll();
当然,效率低于:

linkedBlockingQueue.take();

忘记随机博客吧:你考虑过阅读Javadoc吗?“bounded”、“unbounded”和“blocking”这三个词难道没有传达任何信息吗?相关:它们是两个不同的类。我不认为LInkedBlockingQueue是一个deque,我也不认为ConcurrentBlockingQueue是Java运行时中的一个类。