简介
BlockingQueue位于java.util.concurrent,用于解决多线程环境下的数据传输问题.
首先,它是一个queue,也就是说,它是一个队列,blocking,即其可以阻塞,也就是说,当出现取数据方无法取数据(如队列空)或者生产数据方无法加入数据(如队列满)时,它可以阻塞.
其本身是一个interface,规定了一个规范,定义为
public interface BlockingQueue<E>
extends Queue<E>
方法简介
boolean add(E e)
//立即插入一个元素 如果没有空间,抛出IllegalSttateException异常,成功返回true
boolean contains(Object o)
//如果拥有元素则返回true
int drainTo(Collection<? super E> c)
//将所有有效元素移动到Collection中,然后消除这些元素
int drainTo(Collection<? super E> c, int maxElements)
//删除最多maxElements个有效元素,并且放入指定的Collection中
boolean offer(E e)
//立即插入一个元素,如果没有空间返回false,成功返回true
E poll(long timeout, TimeUnit unit)
//获取并且删除队列首, 等待最多unit的时间,如果需要一段时间才能使元素有效
void put(E e)
//将元素e放入队列,如果需要等待则等待
int remainingCapacity()
//返回理论上这个队列在不需要等待的情况下可以使用的元素个数, 如果没有限制则返回Max_Value
boolean remove(Object o)
//如果存在,则删除一个元素
E take()
//获取队首元素,如果需要等待,则等待到其有效
常用的BlockingQueue
ArrayBlockingQueue
用数组实现的阻塞队列.与常见队列实现类似
LinkdedBlockingQueue
用链表实现的阻塞队列,
DelayQueue
只有当延迟时间到时才能够获取到元素
PriorityBlockingQueue
基于优先级的阻塞队列,这个队列不会阻塞生产者
SynchronousQueue
一种无缓冲的等待队列