BlockingDeque 双端队列

BlockingDeque 是java.util.concurrent包中的一个双端队列,向其中加入元素或从中取出元素都是线程安全的,如果不完全不能对BlockingDequeue插入或者取出元素,那么将会阻塞线程,deque 是 “Double Ended Queue”的简称。因此一个deque可以从两端插入和取出元素的。

BlockingDeque使用说明

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


BlockingDeque 双端队列_第1张图片
双端队列.png

线程将产生元素并将其插入到队列的任一端。 如果双端队列当前已满,则插入线程将被阻塞,直到删除线程将一个元素从双端队列中取出。 如果deque当前为空,则删除线程将被阻塞,直到插入线程将一个元素插入到deque中。
BlockingDeque有4种不同的方法用于插入删除和检查双端队列中的元素。 在所请求的操作不能立即执行的情况下,每组方法的行为都不相同。 这里是一个表格的方法:


BlockingDeque 双端队列_第2张图片
双端对列的方法.png
  1. Throws exception :调用此类方法时,如果不能够立即得到执行则或抛出异常
  2. Special Value :调用此类方法,如果不能够立即执行,会返回一个特殊的值,通常是 true/false
  3. Blocks 调用此类方法,如果不能够立即执行,则会一直阻塞到可以执行为止
  4. Time out 调用此类方法不能够立即执行,则方法会一直阻塞,直到超过给定的超时值。返回一个特殊值,告诉操作是否成功(通常为true / false)

BlockingDeque Extends BlockingQueue

BlockingDeque接口扩展了BlockingQueue接口。 这意味着你可以使用BlockingDeque作为BlockingQueue。 如果这样做,各种插入方法会将元素添加到双端队列的末尾,并且除去方法将从双端队列的开始处移除元素。BlockingQueue接口的插入和删除方法,下面的是BlockingQueue中的方法在BlockingDeque的中对应的实现


BlockingDeque 双端队列_第3张图片
BlockingDeque.png

BlockingDeque 的实现类

  • LinkedBlockingDeque

简单的使用示例

BlockingDeque deque = new LinkedBlockingDeque();
deque.addFirst("1");
deque.addLast("2");
String two = deque.takeLast();
String one = deque.takeFirst();

参考文章:http://tutorials.jenkov.com/java-util-concurrent/blockingdeque.html

你可能感兴趣的:(BlockingDeque 双端队列)