只是想知道为什么他们制作了LinkedBlockingDeque,而同一个非并发副本却是支持可调整大小数组的ArrayDeque
LinkedBlockingQueue使用类似于LinkedList的一组节点(即使未实现List)。

我知道可以使用ArrayBlockingQueue,但是如果要使用ArrayBlockingDeque怎么办?
为什么没有这种选择?

提前致谢。

最佳答案

这可能不是一个正确的问题,没有stackoverflow。
但是我想谈谈这些实现。

->第一件事,我们需要回答为什么我们为某个接口提供不同的实现。
假设我们有一个接口A,并且有两个实现,让我们说B和C。
现在,假设这些实现通过其实现提供相同的功能。
但是B比C具有更好的性能。
然后我们应该删除实现,但有两个原因

1. Backward Compatibility - marking as deprecated.
2. There is a specific scenario where we cannot use B implementation.

例如:

HashMap和LinkedHashMap ->
如果我需要订购的钥匙,我将使用LinkedHashMap,否则我将使用HashMap(以提高性能)。

ArrayBlockingQueue与LinkedBlockingQueue
如果我需要绑定队列,我将使用ArrayBlockingQueue,否则我将使用LinkedBlockingQueue。

现在您的问题为何LinktBlockingDeque中不存在ArrayBlockingDeque

首先让我们看看为什么存在ArrayDeque。

来自ArrayDeque的Java文档。
  • 此类可能比
  • 更快
  • {@link Stack}用作堆栈时,比{@link LinkedList}
  • 更快
  • 用作队列时。

    另请注意,ArrayDeque没有容量限制。
    它还具有用于Headed和tail的两个指针,可在LinkedList实现中使用。

  • 因此,如果存在ArrayBlockingDeque
    1. There would have been no Capacity Restriction, which we normally
       get from ArrayBlockingQueue.
    
    2. There would have guards to access to tail and head pointers
       same as in LinkedBlockingDeque and therefore no significant performance
       gain over LinkedBlockingDeque.
    

    因此可以得出结论,没有ArrayBlockingDeque实现,因为什么也没有
    此实现可以通过LinkedBlockingDeque提供额外的功能。如果你能证明有
    然后,是的,实现需要存在:)

    关于java - ArrayDeque和LinkedBlockingDeque,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17674931/

    10-09 03:56