抽象队列
AbstractQueue 是个抽象类,继承 AbstractCollection,实现 Queue 接口。其中 AbstractCollection 也是个抽象类,实现了 Collection 接口。所以 AbstractQueue 实现了集合的方法,和常用的 ArrayList 等类似。
1 | public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E> { |
AbstractQueue 还实现 Queue 接口,Queue 源码如下:
1 | public interface Queue<E> extends Collection<E> { |
AbstractQueue 在实现 add(E e) 方法时,调用 offer(E e) 添加失败则抛出异常 IllegalStateException("Queue full")。实现 remove() 方法时,调用 poll() 方法返回 null 则抛出异常 NoSuchElementException()。实现 element() 方法时,调用 peek() 方法返回 null 则抛出异常 NoSuchElementException()。
除了以上方法外,AbstractQueue 还实现了 clear() 、addAll(Collection<? extends E> c) 方法。
1 | // 清空队列元素 |
阻塞队列
在 JUC 中,BlockingQueue 很好的解决了多线程中如何高效安全“传输”数据的问题,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。
接口中定义的方法如下:
1 | public interface BlockingQueue<E> extends Queue<E> { |