抽象队列
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> { |