阻塞队列 BlockingQueue<E>的使用(一)

一、概述    

    BlockingQueue<>是线程安全的阻塞队列。

    这一篇只是简单的翻译一下 java8 API 中的内容。以下内容全部来自 java8 的 API

    一个支持没有存储元素的队列,当队列中没有元素时该队列支持等待检索,队列存储了一个元素时队列将变的可用。

    BlockingQueue<E>中的方法有四种形式,不同的处理方法不能立即满足,但在未来某个时刻可能会满足:抛出异常,返回一个特殊的值(不管是NULL还是FALSE,取决于操作),BROC会无限期地调用当前线程直到操作成功,并且在放弃之前只对给定的最大时间限制。如下表中所示:

  抛出异常 返一个特殊值 阻塞 超时
添加元素 add(e) offer(e) put(e) offer(e, time, unit)
移除元素 remove() poll() take() poll(time, unit)
检查元素 element() peek() not applicable not applicable
阻塞队列不接受null元素,在add()、put()和offer()方法的实现中添加null元素会抛出空指针异常。阻塞队列可能是容量有限的。在任何给定的时间,它可能有一个剩余容量,除了没有阻塞之外,没有附加的元素。没有任何固有容量约束的阻塞队列剩余容量为  Integer . MAX_VALUE。

    虽然BlockingQueue<>实现的的设计主要是用于生产者-消费者模式的,但是也实现了Collection<>接口。所以可以使用remove()方法从一个队列中移除元素。这种移除操作一般不能高效的执行,只有在一些特殊情况下才会使用,比如:当队列被取消时。

    BlockingQueue的实现是线程安全的。所有排队方法都是通过原子级采用并发控制内部锁或其他形式实现的。


猜你喜欢

转载自blog.csdn.net/wgs_93/article/details/80398822