并发编程之BlockingQuence与Deque

BlockingQuence:

阻塞队列:阻塞队列与普通队列的区别是支持添加、删除时阻塞功能。
阻塞添加:在添加时,如果队列已满则阻塞该线程,直到不满时唤醒线程继续执行添加操作。
阻塞删除:在删除时,如果队列为空则阻塞该线程,直到队列不为空再执行删除操作(一般都会返回被删除的元素)。
BlockingQuence(接口)阻塞队列:阻塞队列提供了可阻塞的put和take方法,以及支持定时的offer和poll方法。put()和take()方法是Blocking的关键,这两个方法可以在队列为满,或者空的时候进行阻塞,当有新的任务被拿去执行或新的任务进入队列后,自动将线程唤醒。阻塞队列的offer方法在数据项不能被添加到队列中时,将返回一个失败状态。

public interface BlockingQueue<E> extends Queue<E> {
    //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量)
    //在成功时返回 true,如果此队列已满,则抛IllegalStateException。 
    boolean add(E e); 
    //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) 
    // 将指定的元素插入此队列的尾部,如果该队列已满, 
    //则在到达指定的等待时间之前等待可用的空间,该方法可中断 
    boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException; 
    //将指定的元素插入此队列的尾部,如果该队列已满,则一直等到(阻塞)。 
    void put(E e) throws InterruptedException; 
    //获取并移除此队列的头部,如果没有元素则等待(阻塞), 
    //直到有元素将唤醒等待线程执行该操作 
    E take() throws InterruptedException; 
    //获取并移除此队列的头部,在指定的等待时间前一直等到获取元素, //超过时间方法将结束
    E poll(long timeout, TimeUnit unit) throws InterruptedException; 
    //从此队列中移除指定元素的单个实例(如果存在)。 
    boolean remove(Object o); 
}
    //除了上述方法还有继承自Queue接口的方法 
    //获取但不移除此队列的头元素,没有则抛异常NoSuchElementException 
    E element(); 
    //获取但不移除此队列的头;如果此队列为空,则返回 null。 
    E peek(); 
    //获取并移除此队列的头,如果此队列为空,则返回 null。 
    E poll();

BlockingQuence的主要方法
插入方法:
add(E e) : 添加成功返回true,失败抛IllegalStateException异常
offer(E e) : 成功返回 true,如果此队列已满,则返回 false。
put(E e) :将元素插入此队列的尾部,如果该队列已满,则一直阻塞
删除方法:
remove(Object o) :移除指定元素,成功返回true,失败返回false
poll() : 获取并移除此队列的头元素,若队列为空,则返回 null
take():获取并移除此队列头元素,若没有元素则一直阻塞。
检查方法:
element() :获取但不移除此队列的头元素,没有元素则抛异常
peek() :获取但不移除此队列的头;若队列为空,则返回 null。

BlockingQuence的实现
LinkedBlockingQueue:FIFO队列,与LinkedList类似。
ArrayBlockingQueue:FIFO队列,与ArrayList类似。
PriorityBlockingQueue:按优先级排序的队列,既可以根据元素的自然顺序比较元素(前提是实现了Comparable方法),也可以使用Comparator来比较。
SynchornousQueue:维护一组线程,这些线程在等着把元素加入或移除队列。
参考资料:https://blog.csdn.net/javazejian/article/details/77410889

Deque:

Deque是一个双端队列,实现了在队列头和队列尾的高效插入和移除,具体实现包括ArrayDeque和LinkedBlockingDeque。
阻塞队列BlockingQuence适用于生产者-消费者模式,双端队列适用于工作取密,即既是生产者又是消费者模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值