阻塞队列,使用可重入锁保证线程的安全性,维护了一个FIFO的队列,使用数组存储数据,notEmpty和notFull两个等待通知机制完成线程间的通信。

源码分析

add(E e)

往队列尾部添加一个元素,成功返回true,失败抛出IllegalException异常

offer(E e)

往队列尾部添加一个元素,成功返回true,失败返回false

offer(E e,long timeout,TimeUnit unit)

往队列尾部添加一个元素,如果队列未满,则入队列,返回true;如果队列已满,等待timeout时间,重新入队列。

put(E e)

往队列尾部添加一个元素,如果队列已满,等待,然后入队列,无返回值。

take()

从队首取出一个元素,如果队列为空,等待直到被唤醒(notEmpty.await()),然后出队列。

poll()

从队首取出一个元素,如果队列为空,返回null,否则取数据出队列。

poll(long timeout,TimeUnit unit)

从队首取出一个元素,如果队列为空,等待timeout时间,否则直接出队列

peek()

直接返回元素,数据不在队列中删除(take,poll方法都会把数据从队列中删除)。