日期:2014-05-16 浏览次数:20420 次
1.LinkedBlockingQueue<E>:java.util.concurrent
public ? class ?LinkedBlockingQueue<E>? extends ?AbstractQueue<E>? implements ?BlockingQueue<E>,?Serializable
一个基于已链接节点的、范围任意的
blocking queue
。此队列按 FIFO(先进先出)排序元素。队列的头部
是在队列中时间最长的元素。队列的尾部
是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多
数并发应用程序中,其可预知的性能要低。可选的容量范围构造方法参数作为防止队列过度扩展的一种方法。如果未指定容量,则它等于
Integer.MAX_VALUE
。除非插入节点会使队列超出容量,否则每次插入后会动态地创建链接节点。
适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距 。
?
2.ConcurrentLinkedQueue<E>:java.util.concurrent
API中的解释:
一个基于链接节点的、无界的、线程安全的队列 。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列检索操作从队列头部获得元素。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。此队列不允许 null 元素。
?
?
he majority of them provide concurrent access by default but concurrency can be treated in a blocking or non – blocking manner. A BlockingQueue implementation class supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.