-
- 参数类型
-
E- 在这个deque中持有的元素的类型
- All Superinterfaces:
-
BlockingQueue<E>,Collection<E>,Deque<E>,Iterable<E>,Queue<E>
- 所有已知实现类:
-
LinkedBlockingDeque
public interface BlockingDeque<E> extends BlockingQueue<E>, Deque<E>
ADeque另外支持在检索元素时等待deque变为非空的阻塞操作,并且等待在存储元素时在deque中可用的空间。
Summary of BlockingDeque methods First Element (Head) Throws exception Special value Blocks Times out InsertBlockingDeque方法有四种形式,具有不同的处理方式,不能立即满足,但可能在将来的某个时间点满足:一个抛出异常,第二个返回一个特殊值(null或false,具体取决于操作),第三个程序将无限期地阻止当前线程,直到操作成功为止,而第四个程序块在放弃之前只有给定的最大时限。 这些方法总结在下表中:addFirst(e)offerFirst(e)putFirst(e)offerFirst(e, time, unit)RemoveremoveFirst()pollFirst()takeFirst()pollFirst(time, unit)ExaminegetFirst()peekFirst()not applicable not applicable Last Element (Tail) Throws exception Special value Blocks Times out InsertaddLast(e)offerLast(e)putLast(e)offerLast(e, time, unit)RemoveremoveLast()pollLast()takeLast()pollLast(time, unit)ExaminegetLast()peekLast()not applicable not applicable像任何
BlockingQueue一样,BlockingDeque是线程安全的,不允许空元素,并且可能(或可能不)是容量限制的。A
Comparison of BlockingQueue and BlockingDeque methodsBlockingDeque实现可以直接用作FIFOBlockingQueue。 从BlockingQueue接口继承的方法正好等同于BlockingDeque方法,如下表所示:BlockingQueueMethod EquivalentBlockingDequeMethod Insertadd(e)addLast(e)offer(e)offerLast(e)put(e)putLast(e)offer(e, time, unit)offerLast(e, time, unit)Removeremove()removeFirst()poll()pollFirst()take()takeFirst()poll(time, unit)pollFirst(time, unit)Examineelement()getFirst()peek()peekFirst()存储器一致性效果:当与其他并发集合,事先将物体放置成在一个线程动作
BlockingDequehappen-before到该元素的从访问或移除后续动作BlockingDeque在另一个线程。此接口是Java Collections Framework的成员。
- 从以下版本开始:
- 1.6
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 booleanadd(E e)将指定的元素插入由此deque(换句话说,在该deque的尾部)表示的队列中,如果可以立即执行此操作而不违反容量限制,true在成功时返回true,如果当前没有可用空间,则抛出IllegalStateException。voidaddFirst(E e)如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的前面,如果当前没有可用空间,则抛出一个IllegalStateException。voidaddLast(E e)如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,则抛出一个IllegalStateException如果当前没有空格)。booleancontains(Object o)如果此deque包含指定的元素,则返回true。Eelement()检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。Iterator<E>iterator()以正确的顺序返回此deque中的元素的迭代器。booleanoffer(E e)将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true在成功和false,如果当前没有空间可用。booleanoffer(E e, long timeout, TimeUnit unit)将指定的元素插入由此deque表示的队列中(换句话说,在该deque的尾部),等待指定的等待时间(如果需要空间可用)。booleanofferFirst(E e)插入此双端队列的前面,如果它是立即可行且不会违反容量限制,返回指定的元素true在成功false如果当前没有空间可用。booleanofferFirst(E e, long timeout, TimeUnit unit)在此deque的前面插入指定的元素,等待指定的等待时间(如果需要空间可用)。booleanofferLast(E e)插入此双端队列的末尾,如果它是立即可行且不会违反容量限制,返回指定的元素true在成功false如果当前没有空间可用。booleanofferLast(E e, long timeout, TimeUnit unit)在此deque的末尾插入指定的元素,如果需要空间可用,等待指定的等待时间。Epeek()检索但不删除由此deque表示的队列的头部(换句话说,此deque的第一个元素),如果此deque为空,则返回null。Epoll()检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回null。Epoll(long timeout, TimeUnit unit)检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,等待到指定的等待时间(如有必要)使元素变为可用。EpollFirst(long timeout, TimeUnit unit)检索并删除此deque的第一个元素,等待到指定的等待时间(如有必要)使元素变为可用。EpollLast(long timeout, TimeUnit unit)检索并删除此deque的最后一个元素,等待到指定的等待时间,如果需要,元素可用。voidpush(E e)将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可能立即执行此操作而不违反容量限制,则抛出IllegalStateException如果当前没有可用空间)。voidput(E e)将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),等待空格变为可用时。voidputFirst(E e)在此deque的前面插入指定的元素,如有必要,等待空格变为可用。voidputLast(E e)在此deque的末尾插入指定的元素,如有必要,等待空格变为可用。Eremove()检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。booleanremove(Object o)从此deque中删除指定元素的第一个出现。booleanremoveFirstOccurrence(Object o)从此deque中删除指定元素的第一个出现。booleanremoveLastOccurrence(Object o)从此deque中删除指定元素的最后一次出现。intsize()返回此deque中的元素数。Etake()检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,如果需要,等待,直到元素可用。EtakeFirst()检索并删除此deque的第一个元素,如有必要等待,直到元素可用。EtakeLast()检索并删除此deque的最后一个元素,如有必要等待,直到元素可用。-
Methods inherited from interface java.util.concurrent.BlockingQueue
drainTo, drainTo, remainingCapacity
-
Methods inherited from interface java.util.Collection
clear, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray
-
Methods inherited from interface java.util.Deque
addAll, descendingIterator, getFirst, getLast, peekFirst, peekLast, pollFirst, pollLast, pop, removeFirst, removeLast
-
-
-
-
方法详细信息
-
addFirst
void addFirst(E e)
如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的前面,如果当前没有可用的空间,则抛出一个IllegalStateException。 当使用容量限制的deque时,通常最好使用offerFirst。- Specified by:
-
addFirst在接口Deque<E> - 参数
-
e- 要添加的元素 - 异常
-
IllegalStateException- 如果由于容量限制,此时无法添加该元素 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
addLast
void addLast(E e)
如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,如果当前没有可用的空间,则抛出一个IllegalStateException。 当使用容量限制的deque时,通常最好使用offerLast。- Specified by:
-
addLast在接口Deque<E> - 参数
-
e- 要添加的元素 - 异常
-
IllegalStateException- 如果由于容量限制,此时无法添加该元素 -
ClassCastException- 如果指定元素的类阻止它添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
offerFirst
boolean offerFirst(E e)
插入此双端队列的前面,如果它是立即可行且不会违反容量限制,返回指定的元素true在成功false如果当前没有空间可用。 当使用容量限制的deque时,这种方法通常比addFirst方法更为方便 ,只能通过抛出异常来插入元素。- Specified by:
-
offerFirst在接口Deque<E> - 参数
-
e- 要添加的元素 - 结果
-
true如果元素被添加到此deque,否则为false - 异常
-
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
offerLast
boolean offerLast(E e)
插入此双端队列的末尾,如果它是立即可行且不会违反容量限制,返回指定的元素true在成功false如果当前没有空间可用。 当使用容量限制的deque时,这种方法通常比addLast方法更为方便 ,只能通过抛出异常来插入元素。- Specified by:
-
offerLast在接口Deque<E> - 参数
-
e- 要添加的元素 - 结果
-
true如果元素被添加到此deque,否则为false - 异常
-
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
putFirst
void putFirst(E e) throws InterruptedException
在此deque的前面插入指定的元素,如有必要,等待空格变为可用。- 参数
-
e- 要添加的元素 - 异常
-
InterruptedException- 如果在等待时中断 -
ClassCastException- 如果指定元素的类阻止它添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
putLast
void putLast(E e) throws InterruptedException
在此deque的末尾插入指定的元素,如有必要,等待空格变为可用。- 参数
-
e- 要添加的元素 - 异常
-
InterruptedException- 如果在等待时中断 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
offerFirst
boolean offerFirst(E e, long timeout, TimeUnit unit) throws InterruptedException
在此deque的前面插入指定的元素,等待指定的等待时间(如果需要空间可用)。- 参数
-
e- 要添加的元素 -
timeout- 放弃之前等待多久,以unit为单位 -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
true如果成功,或false如果在空间可用之前经过指定的等待时间 - 异常
-
InterruptedException- 如果等待中断 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
offerLast
boolean offerLast(E e, long timeout, TimeUnit unit) throws InterruptedException
在此deque的末尾插入指定的元素,如果需要空间可用,等待指定的等待时间。- 参数
-
e- 要添加的元素 -
timeout- 放弃等待多久,以unit为单位 -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
true如果成功,或false如果在空间可用之前经过指定的等待时间 - 异常
-
InterruptedException- 如果中断等待 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
takeFirst
E takeFirst() throws InterruptedException
检索并删除此deque的第一个元素,如有必要等待,直到元素可用。- 结果
- 这个德克的头
- 异常
-
InterruptedException- 如果在等待时中断
-
takeLast
E takeLast() throws InterruptedException
检索并删除此deque的最后一个元素,如有必要等待,直到元素可用。- 结果
- 这个德克的尾巴
- 异常
-
InterruptedException- 如果在等待时中断
-
pollFirst
E pollFirst(long timeout, TimeUnit unit) throws InterruptedException
检索并删除此deque的第一个元素,等待到指定的等待时间(如有必要)使元素变为可用。- 参数
-
timeout- 放弃之前等待多久,以unit为单位 -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
如果在元素可用之前经过了指定的等待时间,那么这个deque的头,或者是
null - 异常
-
InterruptedException- 等待时中断
-
pollLast
E pollLast(long timeout, TimeUnit unit) throws InterruptedException
检索并删除此deque的最后一个元素,等待到指定的等待时间,如果需要,元素可用。- 参数
-
timeout- 放弃之前等待多久,以unit为单位 -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
如果在元素可用之前经过了指定的等待时间,则此deque的尾部,或
null - 异常
-
InterruptedException- 如果在等待时中断
-
removeFirstOccurrence
boolean removeFirstOccurrence(Object o)
从此deque中删除指定元素的第一个出现。 如果deque不包含元素,则它不变。 更正式地,删除第一元素e,使得o.equals(e)(如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而改变),则返回true。- Specified by:
-
removeFirstOccurrence在接口Deque<E> - 参数
-
o- 要从此deque中删除的元素(如果存在) - 结果
-
true如果一个元素被删除作为这个调用的结果 - 异常
-
ClassCastException- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException- 如果指定的元素为空( optional )
-
removeLastOccurrence
boolean removeLastOccurrence(Object o)
从此deque中删除指定元素的最后一次出现。 如果deque不包含元素,则它不变。 更正式地,删除最后一个元素e,使得o.equals(e)(如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果该deque由于调用而更改),则返回true。- Specified by:
-
removeLastOccurrence在接口Deque<E> - 参数
-
o- 要从此deque移除的元素(如果存在) - 结果
-
true如果一个元素被删除作为这个调用的结果 - 异常
-
ClassCastException- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException- 如果指定的元素为空( optional )
-
add
boolean add(E e)
将指定的元素插入由此deque(换句话说,在该deque的尾部)表示的队列中,如果可以立即执行,而不违反容量限制,true在成功后返回true,如果当前没有可用空间,则抛出IllegalStateException。 当使用容量限制的deque时,通常最好使用offer。此方法相当于
addLast。- Specified by:
-
add在接口BlockingQueue<E> - Specified by:
-
add在接口Collection<E> - Specified by:
-
add在接口Deque<E> - Specified by:
-
add在接口Queue<E> - 参数
-
e- 要添加的元素 - 结果
-
true(由Collection.add(E)指定) - 异常
-
IllegalStateException- 如果由于容量限制,此时无法添加该元素 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
offer
boolean offer(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true在成功和false,如果当前没有空间可用。 当使用容量限制的deque时,这种方法通常比add(E)方法更为方便 ,只能通过抛出异常来插入元素。此方法相当于
offerLast。- Specified by:
-
offer接口BlockingQueue<E> - Specified by:
-
offer在接口Deque<E> - Specified by:
-
offer在接口Queue<E> - 参数
-
e- 要添加的元素 - 结果
-
true如果元素被添加到该队列,否则为false - 异常
-
ClassCastException- 如果指定元素的类阻止它添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
put
void put(E e) throws InterruptedException
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),等待空格变为可用时。此方法相当于
putLast。- Specified by:
-
put在接口BlockingQueue<E> - 参数
-
e- 要添加的元素 - 异常
-
InterruptedException- 如果在等待时中断 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
offer
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
将指定的元素插入由此deque表示的队列中(换句话说,在该deque的尾部),等待指定的等待时间(如果需要空间可用)。此方法相当于
offerLast。- Specified by:
-
offer在接口BlockingQueue<E> - 参数
-
e- 要添加的元素 -
timeout- 放弃之前等待多久,以unit为单位 -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
true如果元素被添加到此deque,否则为false - 异常
-
InterruptedException- 如果在等待时中断 -
ClassCastException- 如果指定元素的类阻止它添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- 如果指定元素的某些属性阻止将其添加到此deque
-
remove
E remove()
-
poll
E poll()
检索并删除由此deque(换句话说,此deque的第一个元素)表示的队列的头部,如果此deque为空,则返回null。此方法相当于
Deque.pollFirst()。
-
take
E take() throws InterruptedException
检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,如果需要,等待,直到元素可用。此方法相当于
takeFirst。- Specified by:
-
take在接口BlockingQueue<E> - 结果
- 这个德克的头
- 异常
-
InterruptedException- 如果在等待时中断
-
poll
E poll(long timeout, TimeUnit unit) throws InterruptedException
检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,等待到指定的等待时间(如有必要)使元素变为可用。这个方法相当于
pollFirst。- Specified by:
-
poll在接口BlockingQueue<E> - 参数
-
timeout- 放弃等待多久,以unit为单位 -
unit- aTimeUnit确定如何解释timeout参数 - 结果
-
如果在元素可用之前经过了指定的等待时间,那么这个deque的头,或者是
null - 异常
-
InterruptedException- 如果在等待时中断
-
element
E element()
-
remove
boolean remove(Object o)
从此deque中删除指定元素的第一个出现。 如果deque不包含元素,则它不变。 更正式地,删除第一元素e,使得o.equals(e)(如果这样的元素存在)。 如果此deque包含指定的元素(或等效地,如果此deque由于调用而更改),则返回true。此方法相当于
removeFirstOccurrence。- Specified by:
-
remove在接口BlockingQueue<E> - Specified by:
-
remove在接口Collection<E> - Specified by:
-
remove在接口Deque<E> - 参数
-
o- 要从此deque移除的元素(如果存在) - 结果
-
true如果这个deque因呼叫而改变了 - 异常
-
ClassCastException- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException- 如果指定的元素为空( optional )
-
contains
boolean contains(Object o)
如果此deque包含指定的元素,则返回true。 更正式地说,返回true当且仅当此双端队列至少包含一个元素e这样o.equals(e)。- Specified by:
-
contains在接口BlockingQueue<E> - Specified by:
-
contains在接口Collection<E> - Specified by:
-
contains在接口Deque<E> - 参数
-
o- 要在此o中检查遏制的对象 - 结果
-
true如果这个deque包含指定的元素 - 异常
-
ClassCastException- 如果指定元素的类与此deque不兼容( optional ) -
NullPointerException- 如果指定的元素为空( optional )
-
size
int size()
返回此deque中的元素数。
-
push
void push(E e)
将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可以立即执行此操作而不违反容量限制,则抛出IllegalStateException如果当前没有可用空间)。此方法相当于
addFirst。- Specified by:
-
push在接口Deque<E> - 参数
-
e- 要推的元素 - 异常
-
IllegalStateException- 如果由于容量限制,此时无法添加该元素 -
ClassCastException- 如果指定元素的类阻止将其添加到此deque -
NullPointerException- 如果指定的元素为空 -
IllegalArgumentException- if some property of the specified element prevents it from being added to this deque
-
-