美文网首页
BlockingQueue

BlockingQueue

作者: haha_writing | 来源:发表于2021-02-22 09:27 被阅读0次

概述

定义

BlockingQueue是一个接口,实现了Collection<E>,Iterable<E>, Queue<E>接口,代表一种在插入和移除元素时都是线程安全的队列。也就是说,多个线程可以同时对BlockingQueue进行插入和移除元素的操作,而不用担心同步的问题。
之所以称为BlockingQueue,是因为它会在阻塞线程,例如,当队列为空时,一个线程来获取元素,会阻塞到直到队列中有元素。具体是否要阻塞,取决于你调用的具体方法。

使用场景

BlockingQueue的典型应用是生产者-消费者,如图所示:


blockingqueue.png

生产者线程将对象插入BlockingQueue,直到队列可包含的最大容量,然后阻塞,直到消费者线程从队列中移除对象。消费者线程持续中队列中获取对象,当队列为空时,消费者线程阻塞直到生产者线程插入一个新的对象。
BlockingQueue可以安全地用于多个生产者和多个消费者。

方法

说明

BlockingQueue接口有4种不同的方法集合来处理队列元素的插入,移除以及检查。


image.png

-Throws Exception:如果试图的操作不能立即执行,抛出异常。
-Special Value:如果试图的操作不能立即执行,返回一个特定值,通常为true或者false。
-Block:如果试图的操作不能立即执行,无限期地阻塞当前线程,直到操作可以成功。
-TimeOut:如果试图的操作不能立即执行,线程阻塞到一个最大时间,返回一个特定值说明操作是否成功,通常为true或者false。
BlockingQueue不接受null元素,否则会引发NullPointerException。null用作哨兵值,指示轮询操作失败。

具体方法

boolean add(E e): 在队列中插入元素,如果不能立即执行,抛出异常。
boolean contains(Object o):如果队列包含某元素,返回true。
int  drainTo(Collection<?super E> c):将队列中的所有元素移除,并增加到 c中。
int  drainTo(Collection<?super E> c, int maxElements):将队列中的元素移除,并增加到c中,个数不超过maxElements。
boolean offer(E e):在队列中插入元素,如果不能立即执行,返回false。
boolean offer(E e, long timeout, TimeUnit unit):在队列中插入元素,如果不能立即执行,等待一定时间,返回最后结果。
E poll(long timeout ,TimeUnit unit):从队首获取并移除元素,阻塞到最大时间,成功返回元素,失败返回null。
void  put(E e):在队列中插入元素,如果不能立即执行,无限制阻塞当前线程。
int remainingCapacity():返回队列的剩余容量。
boolean remove(Object o):从队列中移除一个特定元素。如果队列中包含一个或多个该元素。
E take():从队首获取并移除元素,如果不能立即执行,无限制阻塞当前线程。

实现该接口的子类

ArrayBlockingQueue
DelayQueue
LinkedBlockingDeque
LinkedBlockingQueue
LinkedTransferQueue
PriorityBlockingQueue
SynchronousQueue

相关文章

  • BlockingQueue

    概述 定义 BlockingQueue是一个接口,实现了Collection,Iterable, Qu...

  • 七大阻塞队列的使用

    1 Queue接口 2 BlockingQueue接口 3 ArrayBlockingQueue 3....

  • 接口 BlockingQueue

    java.util.concurrent 接口 BlockingQueue 类型参数:E - 在此 coll...

  • BlockingQueue的概述

    声明:仅仅对比介绍下BlockingQueue和其各个子接口与实现类 基接口BlockingQueue 概述...

  • JUC之队列

    1.队列 1.1 类图 1.2 核心接口 BlockingQueue 阻塞队列 添加区别boolean add(E...

  • 阻塞队列 BlockingQueue

    阻塞队列 BlockingQueue BlockingQueue用法 BlockingQueue 通常用于一个线...

  • 阻塞队列源码解析

    阻塞队列接口 BlockingQueue的方法 既然是队列,说明遵循先进先出的规则(FIFO),肯定有入队和...

  • BlockingQueue

    BlockingQueue 什么是BlockingQueue? A Queue that additionally...

  • BlockingQueue

    了解 BlockingQueue: BlockingQueue 位于 java.util.concurrent ...

  • 11. PriorityBlockingQueue

    PriorityBlockingQueue类实现了BlockingQueue接口。阅读BlockingQueue文...

网友评论

      本文标题:BlockingQueue

      本文链接:https://www.haomeiwen.com/subject/puuxnktx.html