LinkedBlockingQueue介绍

编程

LinkedBlockingQueue是一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。

 

使用场景

 

LinkedBlockingQueue常用于生产者/消费者模式中,作为生产者和消费者的通信桥梁。LinkedBlockingQueue与之前介绍的ConcurrentLinkedQueue以及PriorityBlockingQueue功能类似,都是Queue的一种,不同之处是:

  • LinkedBlockingQueue和PriorityBlockingQueue是阻塞的,而ConcurrentLinkedQueue是非阻塞的,
  • LinkedBlockingQueue和PriorityBlockingQueue通过加锁实现线程安全,而ConcurrentLinkedQueue使用CAS实现无锁模式
  • PriorityBlockingQueue支持优先级

 

由于不同的特征,所以以上三者的使用场景也不同:

  • LinkedBlockingQueue适合需要阻塞的队列场景,如果能不阻塞或者可以通过代码自行实现阻塞,那么建议使用ConcurrentLinkedQueue代替
  • ConcurrentLinkedQueue适合对性能要求较高,同时无需阻塞的场景使用
  • PriorityBlockingQueue适合需要根据任务的不同优先级进行调整队列的顺序的场景

 

结构预览

LinkedBlockingQueue内部实现相对较简单,直接使用一个链表存储数据,通过加锁实现线程安全,通过两个Condition分别实现入队和出队的等待。

 

常用方法解析

LinkedBlockingQueue常用方法有:入队(offer(E)/offer(E, long, TimeUnit)/put(E))、出队(poll()/poll(long, TimeUnit)/take())、删除(remove(Object))。

以上是 LinkedBlockingQueue介绍 的全部内容, 来源链接: utcz.com/z/511380.html

回到顶部