-
- 参数类型
-
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中可用的空间。BlockingDeque
方法有四种形式,具有不同的处理方式,不能立即满足,但可能在将来的某个时间点满足:一个抛出异常,第二个返回一个特殊值(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
方法,如下表所示:BlockingQueue
Method EquivalentBlockingDeque
Method 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()
存储器一致性效果:当与其他并发集合,事先将物体放置成在一个线程动作
BlockingDeque
happen-before到该元素的从访问或移除后续动作BlockingDeque
在另一个线程。此接口是Java Collections Framework的成员。
- 从以下版本开始:
- 1.6
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 boolean
add(E e)
将指定的元素插入由此deque(换句话说,在该deque的尾部)表示的队列中,如果可以立即执行此操作而不违反容量限制,true
在成功时返回true
,如果当前没有可用空间,则抛出IllegalStateException
。void
addFirst(E e)
如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的前面,如果当前没有可用空间,则抛出一个IllegalStateException
。void
addLast(E e)
如果可以立即在不违反容量限制的情况下将指定的元素插入到此deque的末尾,则抛出一个IllegalStateException
如果当前没有空格)。boolean
contains(Object o)
如果此deque包含指定的元素,则返回true
。E
element()
检索但不删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。Iterator<E>
iterator()
以正确的顺序返回此deque中的元素的迭代器。boolean
offer(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回true
在成功和false
,如果当前没有空间可用。boolean
offer(E e, long timeout, TimeUnit unit)
将指定的元素插入由此deque表示的队列中(换句话说,在该deque的尾部),等待指定的等待时间(如果需要空间可用)。boolean
offerFirst(E e)
插入此双端队列的前面,如果它是立即可行且不会违反容量限制,返回指定的元素true
在成功false
如果当前没有空间可用。boolean
offerFirst(E e, long timeout, TimeUnit unit)
在此deque的前面插入指定的元素,等待指定的等待时间(如果需要空间可用)。boolean
offerLast(E e)
插入此双端队列的末尾,如果它是立即可行且不会违反容量限制,返回指定的元素true
在成功false
如果当前没有空间可用。boolean
offerLast(E e, long timeout, TimeUnit unit)
在此deque的末尾插入指定的元素,如果需要空间可用,等待指定的等待时间。E
peek()
检索但不删除由此deque表示的队列的头部(换句话说,此deque的第一个元素),如果此deque为空,则返回null
。E
poll()
检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素),如果此deque为空,则返回null
。E
poll(long timeout, TimeUnit unit)
检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,等待到指定的等待时间(如有必要)使元素变为可用。E
pollFirst(long timeout, TimeUnit unit)
检索并删除此deque的第一个元素,等待到指定的等待时间(如有必要)使元素变为可用。E
pollLast(long timeout, TimeUnit unit)
检索并删除此deque的最后一个元素,等待到指定的等待时间,如果需要,元素可用。void
push(E e)
将元素推送到由此deque表示的堆栈(换句话说,在此deque的头部),如果可能立即执行此操作而不违反容量限制,则抛出IllegalStateException
如果当前没有可用空间)。void
put(E e)
将指定的元素插入由此deque表示的队列(换句话说,在该deque的尾部),等待空格变为可用时。void
putFirst(E e)
在此deque的前面插入指定的元素,如有必要,等待空格变为可用。void
putLast(E e)
在此deque的末尾插入指定的元素,如有必要,等待空格变为可用。E
remove()
检索并删除由此deque表示的队列的头部(换句话说,该deque的第一个元素)。boolean
remove(Object o)
从此deque中删除指定元素的第一个出现。boolean
removeFirstOccurrence(Object o)
从此deque中删除指定元素的第一个出现。boolean
removeLastOccurrence(Object o)
从此deque中删除指定元素的最后一次出现。int
size()
返回此deque中的元素数。E
take()
检索并删除由此deque(换句话说,该deque的第一个元素)表示的队列的头部,如果需要,等待,直到元素可用。E
takeFirst()
检索并删除此deque的第一个元素,如有必要等待,直到元素可用。E
takeLast()
检索并删除此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
-
-