美文网首页
13. BlockingDeque

13. BlockingDeque

作者: shallowinggg | 来源:发表于2019-03-20 17:19 被阅读0次

java.util.concurrent中的BlockingDeque接口表示一个双向队列,它可以被线程安全的放入以及从中获取实例。在本文中,我将向你展示如何使用BlockingDeque

BlockingDeque类是一个Deque,它会阻塞尝试在deque中插入或删除的线程,以防它能够向队列中插入或删除元素。

deque是“Double Ended Queue”(双端队列)的缩写。因此,deque是一个队列,你可以从它的两端插入和获取元素。

BlockingDeque 用法

如果线程同时生成和使用同一队列的元素,则可以使用BlockingDeque。如果生成线程需要在队列的两端插入元素,并且消费线程需要从队列的两端移除元素,那么也可以使用它:

线程将生成元素并将它们插入队列的任一端。如果deque当前已满,则插入线程将被阻塞,直到删除线程将元素从双端队列中取出。如果deque当前为空,则将阻止删除线程,直到插入线程将元素插入到双端队列中。

BlockingDeque 方法

BlockingDeque有4组不同的方法用于插入,移除以及检查双端队列中的元素。如果不能立即执行所请求的操作,则每组方法的行为都不同。这是一个方法表:

抛出异常 返回特殊值 阻塞 超时
Insert addFirst(o) offerFirst(o) putFirst(o) offerFirst(o, timeout, timeunit)
Remove removeFirst(o) pollFirst(o) takeFirst(o) pollFirst(timeout, timeunit)
Examine getFirst(o) peekFirst(o)
抛出异常 返回特殊值 阻塞 超时
Insert addLast(o) offerLast(o) putLast(o) offerLast(o, timeout, timeunit)
Remove removeLast(o) pollLast(o) takeLast(o) pollLast(timeout, timeunit)
Examine getLast(o) peekLast(o)

这与BlockingQueue类似,只多了一组方法。

BlockingDeque 继承自 BlockingQueue

BlockingDeque接口扩展BlockingQueue接口。这意味着你可以使用BlockingDeque作为BlockingQueue。如果这样做,各种插入方法会将元素添加到双端队列的末尾,而删除方法将从双端队列的开头删除元素,即BlockingQueue接口的插入和删除方法。

下面是一个表格,对应了BlockingQueueBlockingDeque的方法:

BlockingQueue BlockingDeque
add() addLast()
offer() x 2 offerLast() x 2
put() putLast()
remove() removeFirst()
poll() x 2 pollFirst() x 2
take() takeFirst()
element() getFirst()
peek() peekFirst()

BlockingDeque 实现

由于BlockingDeque是一个接口,你需要使用其中的一个实现类来使用它。java.util.concurrent包具有以下BlockingDeque接口的实现:

BlockingDeque 代码示例

这是一个如何使用BlockingDeque方法的小代码示例:

BlockingDeque<String> deque = new LinkedBlockingDeque<String>();

deque.addFirst("1");
deque.addLast("2");

String two = deque.takeLast();
String one = deque.takeFirst();

相关文章

网友评论

      本文标题:13. BlockingDeque

      本文链接:https://www.haomeiwen.com/subject/rwvomqtx.html