20220210 java.util.concurrent.BlockingQueue

java.util.concurrent.BlockingQueue

基本信息

  • public interface BlockingQueue<E> extends Queue<E>
  • rt.jar
  • 引入版本:1.5

使用说明

  • java.util.Queue 的子接口,Java 集合框架的一员

  • 支持两个附加操作的 Queue,这两个操作是:获取元素时等待队列变为非空,以及 存储元素时等待空间变得可用

    抛出异常 特殊值 阻塞 超时
    插入 add(e) offer(e) put(e) offer(e, time, unit)
    移除 remove() poll() take() poll(time, unit)
    检查 element() peek() 不可用 不可用
  • BlockingQueue 不接受 null 元素。试图 addputoffer 一个 null 元素时,某些实现会抛出 NullPointerExceptionnull 被用作指示 poll 操作失败的警戒值。

  • BlockingQueue 可以是限定容量的。它在任意给定时间都可以有一个 remainingCapacity,超出此容量,便无法无阻塞地 put 附加元素。没有任何内部容量约束的 BlockingQueue 总是报告 Integer.MAX_VALUE 的剩余容量。

  • BlockingQueue 实现主要用于生产者-使用者队列,但它另外还支持 Collection 接口。因此,举例来说,使用 remove(x) 从队列中移除任意一个元素是有可能的。然而,这种操作通常不会有效执行,只能有计划地偶尔使用,比如在取消排队信息时。

  • BlockingQueue 实现是线程安全的。所有排队方法都可以使用内部锁或其他形式的并发控制来自动达到它们的目的。

继承关系

img

接口定义方法

接口定义方法
boolean add(E e);
将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException
boolean offer(E e);
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;
将指定元素插入此队列中(如果立即可行且不会违反容量限制),成功时返回 true,如果当前没有可用的空间,则返回 false
void put(E e) throws InterruptedException;
将指定元素插入此队列中,将等待可用的空间(如果有必要)。
boolean remove(Object o);
从此队列中移除指定元素的单个实例(如果存在)。
E poll(long timeout, TimeUnit unit)<br/> throws InterruptedException;
获取并移除此队列的头部,在指定的等待时间前等待可用的元素(如果有必要)。
E take() throws InterruptedException;
获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。
public boolean contains(Object o);
如果此队列包含指定元素,则返回 true
int remainingCapacity();
返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的附加元素数量;如果没有内部限制,则返回 Integer.MAX_VALUE
int drainTo(Collection<? super E> c);
int drainTo(Collection<? super E> c, int maxElements);
移除此队列中所有可用的元素,并将它们添加到给定 collection 中。
maxElements 指定最多移除数量
posted @ 2022-02-10 21:21  流星<。)#)))≦  阅读(25)  评论(0编辑  收藏  举报