Java并发包:双端阻塞队列(BlockingDeque)

文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html
抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。
转自请注明出处。

BlockingDeque

Java.util.concruuent包中的BlockingDeque接口是一种双端队列,向其中加入元素或从中取出元素都是线程安全的。这里展示如何使用BlockingDeque。

BlockingDeque是一个双端队列,如果完全不可能对双端队列进行插入或者删除元素,它将会阻塞线程。

deque 是 “Double Ended Queue”的简称。因此一个deque可以从两端插入和取出元素的。

BlockingDeque使用说明

BlockingDeque用于一个线程对同个一个双端队列进行生产和消费元素。也常用于生产线程需要在队列两端插入元素,消费线程需要从队列两端移除元素,下面是一个图示:
这里写图片描述
一个线程生产元素并将元素插入到队列的两端。如果当前队列是满的,插入线程将会被阻塞直到一个移除元素的线程从队列中取出一个元素。同样,如果队列当前是空的,移除元素的线程会被阻塞直到一个插入元素的线程向队列中插入了一个元素。

BlockingDeque的方法

对于在队列中插入、删除和检查元素操作BlockingQueue有4类不同的方法。如果操作不能立即执行,每一类方法的行为将不同。下面是方法列表:

operationThrows ExceptionSpecial ValueBlocksTimes Out
InsertaddFirst(o)offerFirst(o)putFirst(o)offerFirst(o, timeout, timeunit)
RemoveremoveFirst(o)pollFirst(o)takeFirst(o)pollFirst(timeout, timeunit)
ExaminegetFirst(o)peekFirst(o)

对于4种不同行为的说明参见BlockingQueuez中的说明。

BlockingDeque继承自BlockingQueue

BlockingDeque接口继承自BlockingQueue接口。这意味着你可以把BlockingDeque作为BlockingQueue来使用。如果你这样做,那么各种插入元素的方法将会把元素增加到队列的尾部,并且将会从队列的头部开始移除元素。

下面的列表列出了BlockingQueue方法在BlockingDeque中的实现。

BlockingDequeBlockingQueue
add()addLast()
offer() x 2offerLast() x 2
put()putLast()
remove()removeFirst()
poll() x 2pollFirst()
take()takeFirst()
element()getFirst()
peek()peekFirst()
BlockingDeque的具体实现

由于BlockingDeque是一个接口类,使用时需要使用它的实现类。Java.util.concurrent包中有以下关于BlockingDeque接口的实现类:

  • LinkedBlockingDeque
例子

下面是如何实现BlockingDeque的小例子:

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

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

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

LinkedBlockingDeque

LinkedBlockingDeque类实现了BlockingDeque接口。
LinkedBlockingDeque是一个双端队列,如果一个线程试图从一个空的队列中取出元素,它将被阻塞住,不管线程是从哪一端去获取元素。

下面是展示如何实例化和使用LinkedBlockingDeque:

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

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

String two = deque.takeLast();
String one = deque.takeFirst();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值