java - LinkedBlockingQueue 和 ConcurrentLinkedQueue 有什么区别?

标签 java java.util.concurrent lock-free concurrent-programming

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

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

他说:正如您从提供的性能结果中看到的那样,LinkedBlockingQueue 实现了最佳组合(添加和删除元素)性能结果,应该是您实现生产者 - 消费者方案的第一候选者。

我想知道,如果我不在我的代码中使用 lock 会不会更快?

那么为什么 LinkedBlockingQueue 比无锁 Queue(ConcurrentLinkedQueue) 更快?

谢谢!

最佳答案

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

关于java - LinkedBlockingQueue 和 ConcurrentLinkedQueue 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274608/

相关文章:

java - Java 数组从小到大排序的方法

java - 如何将一些数据(例如字符串)从我的 Activity 发送到 Android 中的服务?

java - 如何让flatMap在后台线程执行

java - 我在面板上有一个用于按钮的 actionListener,获取空指针

java - 在多线程程序中使用迭代器时出现并发修改异常

c++ - 无锁双向链表的原子操作

c# - Interlocked.CompareExchange 也应该是一个 volatile 变量吗?

java - 锁.tryLock() : Thread performing different tasks?

java.util.concurrent.LinkedBlockingQueue 不是 FIFO 吗?

c++ - boost::lockfree - 为排队元素调用析构函数