Queue Interface
Queue中定义的增删查方法都分别存在两种形式:1)操作失败抛出异常;2)操作失败返回null或者false。如下:
其中,insert操作失败(超出容量限制)时抛出IllegalStateException;队列为空是,remove()和element()方法抛出NoSuchElementException。
Queue的实现类通常都不允许插入null值。(不过LinkedList是个例外,由于历史原因,它支持插入null值,不过实际使用时应该尽量避免。)
Queue Implementations
General-Purpose Queue Implementations
LinkedList(@NonThreadSafe): FIFO
PriorityQueue(@NonThreadSafe):基于balanced binary heap数据结构实现(Object[] queue),按照制定的顺序排序:元素自然排序,或构造时显示制定的Comparator。通过interator遍历PriorityQueue得到的序列不一定是排序的。如果需要有序遍历,可以调用Arrays.sort(pq.toArray()).
Concurrent Queue Implementations
BlockingQueue Interface extends Queue, 是Queue的同步版本。它的实现包括:
LinkedBlockingQueue — an optionally bounded FIFO blocking queue backed by linked nodes
ArrayBlockingQueue — a bounded FIFO blocking queue backed by an array
PriorityBlockingQueue — an unbounded blocking priority queue backed by a heap
DelayQueue — a time-based scheduling queue backed by a heap
SynchronousQueue — a simple rendezvous mechanism that uses the BlockingQueue interface
此外,TransferQueue extends BlockingQueue, 有唯一实现LinkedTransferQueue. 可以在元素入队时等待其他线程读取队列完毕。