java.util.concurrent

接口
异常
java.lang.Object
  继承者 java.util.AbstractCollection<E>
      继承者 java.util.AbstractQueue<E>
          继承者 java.util.concurrent.LinkedBlockingDeque<E>
类型参数:
E - 保存在此 collection 中的元素类型
所有已实现的接口:
Serializable, Iterable<E>, Collection<E>, BlockingDeque<E>, BlockingQueue<E>, Deque<E>, Queue<E>

public class LinkedBlockingDeque<E>
     
extends AbstractQueue<E>
implements BlockingDeque<E>, Serializable

一个基于已链接节点的、任选范围的阻塞双端队列

可选的容量范围构造方法参数是一种防止过度膨胀的方式。如果未指定容量,那么容量将等于 Integer.MAX_VALUE。只要插入元素不会使双端队列超出容量,每次插入后都将动态地创建链接节点。

大多数操作都以固定时间运行(不计阻塞消耗的时间)。异常包括 removeremoveFirstOccurrenceremoveLastOccurrencecontainsiterator.remove() 以及批量操作,它们均以线性时间运行。

此类及其迭代器实现 CollectionIterator 接口的所有可选 方法。

此类是 Java Collections Framework 的成员。

从以下版本开始:
1.6
另请参见:
序列化表格

构造方法摘要
LinkedBlockingDeque()
          创建一个容量为 Integer.MAX_VALUELinkedBlockingDeque
LinkedBlockingDeque(Collection<? extends E> c)
          创建一个容量为 Integer.MAX_VALUELinkedBlockingDeque,最初包含给定 collection 的元素,以该 collection 迭代器的遍历顺序添加。
LinkedBlockingDeque(int capacity)
          创建一个具有给定(固定)容量的 LinkedBlockingDeque
 
方法摘要
 boolean add(E e)
          在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾。
 void addFirst(E e)
          如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开头;如果当前没有空间可用,则抛出 IllegalStateException
 void addLast(E e)
          如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾;如果当前没有空间可用,则抛出 IllegalStateException
 void clear()
          以原子方式 (atomically) 从此双端队列移除所有元素。
 boolean contains(Object o)
          如果此双端队列包含指定的元素,则返回 true
 Iterator<E> descendingIterator()
          返回在此双端队列的元素上以逆向连续顺序进行迭代的迭代器。
 int drainTo(Collection<? super E> c)
          移除此队列中所有可用的元素,并将它们添加到给定 collection 中。
 int drainTo(Collection<? super E> c, int maxElements)
          最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定 collection 中。
 E element()
          获取但不移除此双端队列表示的队列的头部。
 E getFirst()
          获取,但不移除此双端队列的第一个元素。
 E getLast()
          获取,但不移除此双端队列的最后一个元素。
 Iterator<E> iterator()
          返回在此双端队列元素上以恰当顺序进行迭代的迭代器。
 boolean offer(E e)
          如果立即可行且不违反容量限制,则将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),并在成功时返回 true;如果当前没有空间可用,则返回 false
 boolean offer(E e, long timeout, TimeUnit unit)
          将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),必要时将在指定的等待时间内一直等待可用空间。
 boolean offerFirst(E e)
          如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开头,并在成功时返回 true;如果当前没有空间可用,则返回 false
 boolean offerFirst(E e, long timeout, TimeUnit unit)
          将指定的元素插入此双端队列的开头,必要时将在指定的等待时间内等待可用空间。
 boolean offerLast(E e)
          如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾,并在成功时返回 true;如果当前没有空间可用,则返回 false
 boolean offerLast(E e, long timeout, TimeUnit unit)
          将指定的元素插入此双端队列的末尾,必要时将在指定的等待时间内等待可用空间。
 E peek()
          获取但不移除此双端队列表示的队列的头部(即此双端队列的第一个元素);如果此双端队列为空,则返回 null
 E peekFirst()
          获取,但不移除此双端队列的第一个元素;如果此双端队列为空,则返回 null
 E peekLast()
          获取,但不移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null
 E poll()
          获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素);如果此双端队列为空,则返回 null
 E poll(long timeout, TimeUnit unit)
          获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),如有必要将在指定的等待时间内等待可用元素。
 E pollFirst()
          获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null
 E pollFirst(long timeout, TimeUnit unit)
          获取并移除此双端队列的第一个元素,必要时将在指定的等待时间等待可用元素。
 E pollLast()
          获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null
 E pollLast(long timeout, TimeUnit unit)
          获取并移除此双端队列的最后一个元素,必要时将在指定的等待时间内等待可用元素。
 E pop()
          从此双端队列所表示的堆栈中弹出一个元素。
 void push(E e)
          将元素推入此双端队列表示的栈。
 void put(E e)
          将指定的元素插入此双端队列表示的队列中(即此双端队列的尾部),必要时将一直等待可用空间。
 void putFirst(E e)
          将指定的元素插入此双端队列的开头,必要时将一直等待可用空间。
 void putLast(E e)
          将指定的元素插入此双端队列的末尾,必要时将一直等待可用空间。
 int remainingCapacity()
          返回理想情况下(没有内存和资源约束)此双端队列可不受阻塞地接受的额外元素数。
 E remove()
          获取并移除此双端队列表示的队列的头部。
 boolean remove(Object o)
          从此双端队列移除第一次出现的指定元素。
 E removeFirst()
          获取并移除此双端队列第一个元素。
 boolean removeFirstOccurrence(Object o)
          从此双端队列移除第一次出现的指定元素。
 E removeLast()
          获取并移除此双端队列的最后一个元素。
 boolean removeLastOccurrence(Object o)
          从此双端队列移除最后一次出现的指定元素。
 int size()
          返回此双端队列中的元素数。
 E take()
          获取并移除此双端队列表示的队列的头部(即此双端队列的第一个元素),必要时将一直等待可用元素。
 E takeFirst()
          获取并移除此双端队列的第一个元素,必要时将一直等待可用元素。
 E takeLast()
          获取并移除此双端队列的最后一个元素,必要时将一直等待可用元素。
 Object[] toArray()
          返回以恰当顺序(从第一个元素到最后一个元素)包含此双端队列所有元素的数组。
<T> T[]
toArray(T[] a)
          返回以恰当顺序包含此双端队列所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
 String toString()
          返回此 collection 的字符串表示形式。
 
从类 java.util.AbstractQueue 继承的方法
addAll
 
从类 java.util.AbstractCollection 继承的方法
containsAll, isEmpty, removeAll, retainAll
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
从接口 java.util.Collection 继承的方法
addAll, containsAll, equals, hashCode, isEmpty, removeAll, retainAll
 

构造方法详细信息

LinkedBlockingDeque

public LinkedBlockingDeque()
创建一个容量为 Integer.MAX_VALUELinkedBlockingDeque


LinkedBlockingDeque

public LinkedBlockingDeque(int capacity)
创建一个具有给定(固定)容量的 LinkedBlockingDeque

参数:
capacity - 此双端队列的容量
抛出:
IllegalArgumentException - 如果 capacity 小于 1

LinkedBlockingDeque

public LinkedBlockingDeque(Collection<? extends E> c)
创建一个容量为 Integer.MAX_VALUELinkedBlockingDeque,最初包含给定 collection 的元素,以该 collection 迭代器的遍历顺序添加。

参数:
c - 最初所包含元素所属的 collection
抛出:
NullPointerException - 如果指定 collection 或其任意元素为 null
方法详细信息

addFirst

public void addFirst(E e)
从接口 BlockingDeque 复制的描述
如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开头;如果当前没有空间可用,则抛出 IllegalStateException。当使用有容量限制的双端队列时,通常首选 offerFirst

指定者:
接口 BlockingDeque<E> 中的 addFirst
指定者:
接口 Deque<E> 中的 addFirst
参数:
e - 要添加的元素
抛出:
IllegalStateException - 如果此时由于容量限制而无法添加元素
NullPointerException - 如果指定的元素为 null

addLast

public void addLast(E e)
从接口 BlockingDeque 复制的描述
如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾;如果当前没有空间可用,则抛出 IllegalStateException。当使用有容量限制的双端队列时,通常首选 offerLast

指定者:
接口 BlockingDeque<E> 中的 addLast
指定者:
接口 Deque<E> 中的 addLast
参数:
e - 要添加的元素
抛出:
IllegalStateException - 如果此时由于容量限制而无法添加元素
NullPointerException - 如果指定的元素为 null

offerFirst

public boolean offerFirst(E e)
从接口 BlockingDeque 复制的描述
如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的开头,并在成功时返回 true;如果当前没有空间可用,则返回 false。当使用有容量限制的双端队列时,此方法通常优于 addFirst 方法,后者可能无法插入元素,而只是抛出一个异常。

指定者:
接口 BlockingDeque<E> 中的 offerFirst
指定者:
接口 Deque<E> 中的 offerFirst
参数:
e - 要添加的元素
返回:
如果元素被添加到此双端队列,则返回 true,否则返回 false
抛出:
NullPointerException - 如果指定的元素为 null

offerLast

public boolean offerLast(E e)
从接口 BlockingDeque 复制的描述
如果立即可行且不违反容量限制,则将指定的元素插入此双端队列的末尾,并在成功时返回 true;如果当前没有空间可用,则返回 false。当使用有容量限制的双端队列时,该方法通常优于 addLast 方法,后者可能无法插入元素,而只是抛出一个异常。

指定者:
接口 BlockingDeque<E> 中的 offerLast
指定者:
接口 Deque<E> 中的 offerLast
参数:
e - 要添加的元素
返回:
如果元素被添加到此双端队列,则返回 true,否则返回 false
抛出:
NullPointerException - 如果指定的元素为 null

putFirst

public void putFirst(E e)
              throws InterruptedException
从接口 BlockingDeque 复制的描述
将指定的元素插入此双端队列的开头,必要时将一直等待可用空间。

指定者:
接口 BlockingDeque<E> 中的 putFirst
参数:
e - 要添加的元素
抛出:
NullPointerException - 如果指定的元素为 null
InterruptedException - 如果在等待时被中断

putLast

public void putLast(E e)
             throws InterruptedException
从接口 BlockingDeque 复制的描述
将指定的元素插入此双端队列的末尾,必要时将一直等待可用空间。

指定者:
接口 BlockingDeque<E> 中的 putLast
参数:
e - 要添加的元素
抛出:
NullPointerException - 如果指定的元素为 null
InterruptedException - 如果在等待时被中断

offerFirst

public boolean offerFirst(E e,
                          long timeout,
                          TimeUnit unit)
                   throws InterruptedException
从接口 BlockingDeque 复制的描述
将指定的元素插入此双端队列的开头,必要时将在指定的等待时间内等待可用空间。

指定者:
接口 BlockingDeque<E> 中的 offerFirst
参数:
e - 要添加的元素
timeout - 放弃之前等待的时间长度,以 unit 为时间单位
unit - 确定如何解释 timeout 参数的 TimeUnit
返回:
如果成功,则返回 true;如果在空间可用前超过了指定的等待时间,则返回 false
抛出:
NullPointerException - 如果指定的元素为 null
InterruptedException - 如果在等待时被中断

offerLast

public boolean offerLast(E e,
                         long timeout,
                         TimeUnit unit)
                  throws InterruptedException
从接口 BlockingDeque 复制的描述
将指定的元素插入此双端队列的末尾,必要时将在指定的等待时间内等待可用空间。

指定者:
接口 BlockingDeque<E> 中的 offerLast
参数:
e - 要添加的元素
timeout - 放弃之前等待的时间长度,以 unit 为时间单位
unit - 确定如何解释 timeout 参数的 TimeUnit
返回:
如果成功,则返回 true;如果在空间可用前超过了指定的等待时间,则返回 false
抛出:
NullPointerException - 如果指定的元素为 null
InterruptedException - 如果在等待时被中断

removeFirst

public E removeFirst()
从接口 Deque 复制的描述
获取并移除此双端队列第一个元素。此方法与 pollFirst 唯一的不同在于:如果此双端队列为空,它将抛出一个异常。

指定者:
接口 Deque<E> 中的 removeFirst
返回:
此双端队列的头部
抛出:
NoSuchElementException - 如果此双端队列为空

removeLast

public E removeLast()
从接口 Deque 复制的描述
获取并移除此双端队列的最后一个元素。此方法与 pollLast 唯一的不同在于:如果此双端队列为空,它将抛出一个异常。

指定者:
接口 Deque<E> 中的 removeLast
返回:
此双端队列的尾部
抛出:
NoSuchElementException - 如果此双端队列为空

pollFirst

public E pollFirst()
从接口 Deque 复制的描述
获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null

指定者:
接口 Deque<E> 中的 pollFirst
返回:
此双端队列的头部;如果此双端队列为空,则返回 null

pollLast

public E pollLast()
从接口 Deque 复制的描述
获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null

指定者:
接口 Deque<E> 中的 pollLast
返回:
此双端队列的尾部;如果此双端队列为空,则返回 null

takeFirst

public E takeFirst()
            throws InterruptedException
从接口 BlockingDeque 复制的描述
获取并移除此双端队列的第一个元素,必要时将一直等待可用元素。

指定者:
接口 BlockingDeque<E> 中的 takeFirst
返回: