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
元素。试图 add
、put
或 offer
一个 null
元素时,某些实现会抛出 NullPointerException
。null
被用作指示 poll
操作失败的警戒值。
BlockingQueue
可以是限定容量的。它在任意给定时间都可以有一个 remainingCapacity
,超出此容量,便无法无阻塞地 put
附加元素。没有任何内部容量约束的 BlockingQueue
总是报告 Integer.MAX_VALUE
的剩余容量。
BlockingQueue
实现主要用于生产者-使用者队列,但它另外还支持 Collection
接口。因此,举例来说,使用 remove(x)
从队列中移除任意一个元素是有可能的。然而,这种操作通常不会有效执行,只能有计划地偶尔使用,比如在取消排队信息时。
BlockingQueue
实现是线程安全的。所有排队方法都可以使用内部锁或其他形式的并发控制来自动达到它们的目的。
接口定义方法 |
---|
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 指定最多移除数量 |