ConcurrentLinkedDeque vs LinkedBlockingDeque

我需要有一个线程安全的LIFO结构,并发现我可以使用线程安全的实现来实现这一点。Java 7 引入了 ConcurrentLinkedDeque,Java 6 引入了 LinkedBlockingDequeDeque

如果我只使用非阻塞方法,例如,它与?LinkedBlockingDequeaddFirst()removeFirst()ConcurrentLinkedDeque

即,如果您忽略阻塞方面,除了有界之外,和 之间还有其他区别吗?ConcurrentLinkedDequeLinkedBlockingDequeLinkedBlockingDeque


答案 1

引用伟大的道格·李(我的强调)

LinkedBlockingDeque vs ConcurrentLinkedDeque

LinkedBlockingDeque 类旨在成为“标准”阻塞 deque 类。当前实现的开销相对较低,但可伸缩性相对较差。...

...ConcurrentLinkedDeque具有与LinkedBlockingDeque几乎相反的性能配置文件相对较高的开销,但非常好的可扩展性。...在并发应用程序中,想要一个线程安全但不支持阻塞的Deque并不常见。大多数这样做的人可能最好有特殊情况的解决方案。

他似乎建议你应该使用,除非你特别需要 的功能。LinkedBlockingDequeConcurrentLinkedDeque


答案 2

ConcurentLinkedDequeue是无锁的(参见源代码中的注释),而LinkedBlockingQueue使用锁定。那就是前者应该更有效率


推荐