BlockingDeque 阻塞双端队列
" java.util.concurrent"类中的" BlockingDeque"接口表示一个双端队列,该双端队列可以安全地放入线程中并从中获取实例。在本文中,我将向我们展示如何使用此BlockingDeque
。
BlockingDeque
类是一个'Deque',它阻止线程调优以从双端队列中插入或者删除元素,以防无法从双端队列中插入或者删除元素。
"双端队列"是"双端队列"的缩写。因此,"双端队列"是一个队列,我们可以从两端插入和取出元素。
阻塞双端使用
如果线程同时产生和消耗同一队列中的元素,则可以使用BlockingDeque
。如果生产线程需要在队列的两端插入,而消费线程需要从队列的两端移除,则也可以使用它。
线程将产生元素并将其插入队列的任一端。如果双端队列当前已满,则插入线程将被阻塞,直到移除线程将一个元素从双端队列中取出。如果双端队列当前为空,则删除线程将被阻塞,直到插入线程将元素插入双端队列为止。
BlockingDeque方法
" BlockingDeque"具有4种不同的方法来插入,删除和检查双端队列中的元素。如果无法立即执行所请求的操作,则每组方法的行为都会有所不同。
这4种不同的行为集意味着:
- 引发异常:如果无法立即进行尝试的操作,则会引发异常。
- 特殊值:如果无法立即尝试操作,则会返回一个特殊值(通常为true / false)。
- 阻止:如果无法立即执行尝试的操作,则该方法调用将阻止直到成功。
- 超时:如果无法立即进行尝试的操作,则该方法调用将一直阻塞直到成功,但等待时间不得长于给定的超时。返回一个特殊值,告诉操作是否成功(通常为true / false)。
BlockingDeque扩展了BlockingQueue
" BlockingDeque"接口扩展了" BlockingQueue"接口。这意味着我们可以将BlockingDeque
用作BlockingQueue
。如果这样做,各种插入方法会将元素添加到双端队列的末尾,而remove方法将从双端队列的开头删除这些元素。即,BlockingQueue
接口的插入和删除方法。
BlockingDeque实现
由于BlockingDeque
是一个接口,因此我们需要使用其众多实现之一来使用它。 java.util.concurrent
软件包具有BlockingDeque
接口的以下实现:
- LinkedBlockingDeque
BlockingDeque代码示例
这是一个如何使用BlockingDeque
方法的小代码示例:
BlockingDeque<String> deque = new LinkedBlockingDeque<String>(); deque.addFirst("1"); deque.addLast("2"); String two = deque.takeLast(); String one = deque.takeFirst();