BlockingDeque

本文翻译自http://tutorials.jenkov.com/java-util-concurrent/blockingdeque.html,机翻加人工校正,仅供学习交流。

BlockingDeque

在java.util.concurrent包中,BlockingDeque接口是一个线程安全的插入和取出的双向队列。在本文中,我将向您展示如何使用BlockingDeque。
BlockingDeque是一个阻塞线程插入或删除元素的双向队列,如果不能从双向队列中插入或删除元素。
deque是“双尾队列”的缩写。因此,deque是一个队列,您可以从两端插入和获取元素。

BlockingDeque用法

BlockingDeque用在线程生产和消费元素在同一个队列的情况下,也可以用于生产线程需要插入队列的两端,消费线程需要消费队列的两端,下面是示意图:
一个阻塞双向队列-线程可以在两端插入和消费
一个线程生产元素并将元素插入到队列任意一端。如果队列容量满了,生产线程将会阻塞,直到消费线程从双向队列中消费元素。如果双向队列是空的,消费线程将会会被阻塞,直到生产线程往里面插入元素。

BlockingDeque的方法

BlockingDeque有从双向队列中插入、移除和检查分别有四种不同的方法。当请求操作不能立马执行,每种方法将会有不同表现。这是方法的表格:
在这里插入图片描述
4种不同行为的意义:

  1. Throws Exception:如果请求不能立即执行,抛出一个异常。
  2. Special Value:如果请求不能立即执行,返回特定的值(true/false)。
  3. Blocks:如果请求不能立即执行,请求将会阻塞。
  4. Times out:如果请求不能立即执行,请求将会阻塞,等待不会超过给定的时间。返回一个指定的值告诉操作是否成功。

阻塞双向队列继承阻塞队列

BlockingDeque接口继承BlockingQueue接口,这意味着可以将BlockingDeque当做BlokcingQueue使用。如果你这样做,不同的插入方法添加元素到双向队列的末端,移除方法将从双向队列的开端移除元素。BlockingQueue接口的插入和移除方法,下面表格展示BlockingQueue的方法在BlockingDeque的实现类中如何做的。
在这里插入图片描述

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();
下一节: LinkedBlockingDeque
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值