Queue接口与list/Set同一级别,都继承了Collection接口,LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限。
即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法了,而不能直接访问LinkedList的非Queue的方法,只有恰当的方法
才可以使用。BlockingQueue继承了Queue接口。
队列是一种数据接口,他有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素就是说,队列一一种先进先出的方式管理数据,
如果你试图向一个已经满了的阻塞队列中添加一个元素或者从一个空的阻塞队列中移除一个元素,将导致线程阻塞,在多线程进行合作时,阻塞队列是
很有用的工具。工作者线程可以定期的把中间结果存到阻塞队列中而其他工作者线程把中间结果去除并在将来修改他们。队列会自动平衡负载,如果第
一个线程集运行的比第二个慢,则第二个线程集在等待结果时就会阻塞,如果第一个线程集运行的快,那么他讲等待第二个线程集赶上来,
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞take 移除并返回队列头部的元素 如果队列为空,则阻塞
remove/element/offer/poll/peek其实是属于Queue接口。
阻塞队列的操作可以根据他们的相应方式分为以下三类:add/remove/element操作在你试图为一个已满的队列添加元素或从空队列去的元素时就会抛出异常。当然,在对多线程程序中,队列在任何时间都可能变成空的或满的,所以你可能想使用offer、poll、peek方法,这些方法无法完成任务时只是给出一个出错提示而不会抛出异常。
注意:poll和peek方法出错并返回null,因此,向队列中插入null值是不合法的。
http://www.cnblogs.com/end/archive/2012/10/25/2738493.html