阻塞队列,使用可重入锁保证线程的安全性,维护了一个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方法都会把数据从队列中删除)。