我需要一个线程安全的 LIFO 结构,并发现我可以使用线程安全的实现Deque
为了这。 Java 7 引入了ConcurrentLinkedDeque http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.htmlJava 6 有LinkedBlockingDeque http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/LinkedBlockingDeque.html.
如果我只使用非阻塞方法LinkedBlockingDeque
例如addFirst()
and removeFirst()
有什么区别吗ConcurrentLinkedDeque
?
即,如果您忽略阻塞方面,那么两者之间是否还有其他区别ConcurrentLinkedDeque
and LinkedBlockingDeque
, 除了LinkedBlockingDeque
被限制?
引用伟大的Doug Lea http://cs.oswego.edu/pipermail/concurrency-interest/2004-November/001140.html(我的重点)
LinkedBlockingDeque 与 ConcurrentLinkedDeque
LinkedBlockingDeque 类旨在成为“标准”阻塞双端队列类。目前的实施有开销相对较低,但可扩展性相对较差. ...
... ConcurrentLinkedDeque 的性能概况与 LinkedBlockingDeque 几乎相反: 开销相对较高,但扩展性很好。 ...在并发应用程序中,想要线程安全但不支持阻塞的双端队列并不常见。大多数这样做的人可能会通过特殊情况的解决方案获得更好的结果。
他似乎建议你应该使用LinkedBlockingDeque
除非您特别需要以下功能ConcurrentLinkedDeque
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)