`

LinkedBlockingQueue和ConcurrentLinkedQueue

 
阅读更多
 

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中的解释:

[java]
public   class  ConcurrentLinkedQueue<E> extends  AbstractQueue<E> implements  Queue<E>, Serializable  

一个基于链接节点的、无界的、线程安全的队列 。此队列按照 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.

 
ArrayBlockingQueue vs ConcurrentLinkedQueue vs LinkedBlockingQueue vs LinkedList
多线程添加数据
ArrayBlockingQueue and ConcurrentLinkedQueue performed slightly better compared to LinkedList and LinkedBlockingQueue .
多线程获取数据
ArrayBlockingQueue and ConcurrentLinkedQueue performed slightly better compared to LinkedList and LinkedBlockingQueue .
多线程遍历数据
Both ArrayBlockingQueue and LinkedBlockingQueue implementation classes performed poorly compared to the ConcurrentLinkedQueue and LinkedList implementation classes.
多线程添加和获取数据
ArrayBlockingQueue and LinkedBlockingQueue outperformed both LinkedList and ConcurrentLinkedQueue . BlockingQueue implementations are designed to be used primarily for producer–consumer queues.

总结:LinkedBlockingQueue achieved the best combined (adding and removing elements) performance results and should be your number one candidate for implementing producer – consumer schenarios
分享到:
评论

相关推荐

    LinkedBlockingQueue 和 ConcurrentLinkedQueue的区别.docx

    LinkedBlockingQueue和ConcurrentLinkedQueue是Java并发包中两个常用的线程安全队列,它们各有特点,适用于不同的场景。本文将深入探讨两者之间的差异以及如何根据需求选择合适的队列。 首先,LinkedBlockingQueue...

    并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法

    ### 并发队列 ConcurrentLinkedQueue 和阻塞队列 LinkedBlockingQueue 用法详解 #### 一、并发队列 ConcurrentLinkedQueue 概述 `ConcurrentLinkedQueue` 是 Java 并发包 `java.util.concurrent` 提供的一个高性能...

    java.util.concurrent

    java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic...该图详细的列举了并发包下面的结构,包含所有接口和具体实现类。

    实战Concurrent-BlockQueue

    本文将深入探讨`ConcurrentLinkedQueue`、`ArrayBlockingQueue`以及`LinkedBlockingQueue`这三种实现,并分析它们的设计原理与应用场景。 首先,我们来看`ConcurrentLinkedQueue`。它是基于非阻塞算法(CAS,...

    Java容器.xmind

    container Collection 标记: 顶级接口 List 标记: interface ArrayList 标记: class ...LinkedBlockingQueue ...ConcurrentLinkedQueue ...LinkedBlockingQueue 链表结构实现,无界队列(默认上限Integer.MAX_VALUE)

    Queue-Simulator

    对于多线程环境,可以使用java.util.concurrent包下的LinkedBlockingQueue或ConcurrentLinkedQueue,它们都是线程安全的。 队列模拟器的设计应包括以下几个关键组件: 1. **顾客模型**:每个顾客都是一个对象,...

    并发容器的原理,7大并发容器详解、及使用场景

    它们分别基于链表、数组和优先级堆实现,其中 ArrayBlockingQueue 和 LinkedBlockingQueue 使用 ReentrantLock 和 Condition 实现线程安全,PriorityBlockingQueue 则是一个按优先级排序的队列。 在选择并发容器时...

    构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached

    另外,为了进一步优化性能,我们还可以考虑使用`LinkedBlockingQueue`或`ConcurrentLinkedQueue`这样的并发队列来管理缓存的入队和出队操作。这些队列在多线程环境下的性能表现优秀,能够有效减少锁竞争,提高并发...

    java.util源码-java-util:javautil源代码

    `java.util.Queue`接口及其实现如ArrayDeque、LinkedList(作为Queue的实现),以及`java.util.concurrent`包下的并发队列如LinkedBlockingQueue、ConcurrentLinkedQueue等,提供高效的数据同步和处理机制。...

    Java数据结构实现之Queue.zip

    例如,如果需要高效的并发操作,可以选择`ConcurrentLinkedQueue`或`LinkedBlockingQueue`;如果对元素的顺序有特定要求,可以使用`PriorityQueue`;对于一般用途且对性能要求较高,`ArrayDeque`是不错的选择。 ...

    Java并发编程进阶练习代码

    `Concurrent`包包含了大量设计精良且线程安全的数据结构,如`ConcurrentHashMap`(线程安全的哈希映射),`ConcurrentLinkedQueue`(无界的并发队列)和`CopyOnWriteArrayList`(写时复制的列表)等。这些数据结构在...

    java队列源码

    - Java 提供了多种队列实现,如 `LinkedList`、`ArrayDeque` 和并发类 `ConcurrentLinkedQueue`、`LinkedBlockingQueue` 等。其中,`ConcurrentLinkedQueue` 是一个非阻塞的线程安全队列,而 `LinkedBlockingQueue`...

    并发编程二进阶部分.rar

    Java的`java.util.concurrent`包提供了多种阻塞队列实现,如ArrayBlockingQueue、LinkedBlockingQueue和PriorityBlockingQueue等。这些示例代码可能包含如何创建、插入、删除和操作阻塞队列的实例。 2. **卖票的...

    多线程 队列利用

    3. **并发容器**:Java的`java.util.concurrent`包提供了多种并发队列,如`ArrayBlockingQueue`、`LinkedBlockingQueue`和`ConcurrentLinkedQueue`等,它们为多线程环境提供了高效的队列操作。 4. **工作窃取算法**...

    14个Java并发容器,你用过几个?.docx

    5. **ConcurrentLinkedDeque**: 与ConcurrentLinkedQueue类似,但它是一个双端队列,支持从队首和队尾进行插入和移除操作,既可以作为队列也可以作为栈。 6. **ConcurrentSkipListMap**: 使用跳表(Skip List)实现...

    【2018最新最详细】并发多线程教程

    20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解 21.线程池ThreadPoolExecutor实现原理 22.线程池之ScheduledThreadPoolExecutor 23.FutureTask基本操作总结 24.Java中atomic包中的原子操作类...

    heima-JUC-资料

    3. **并发集合**:如`ConcurrentLinkedQueue`、`LinkedBlockingQueue`、`ConcurrentSkipListMap`等,这些集合类在设计时就考虑了并发性能,能够在不使用锁的情况下进行并发修改,从而提高了并发效率。 4. **锁**:`...

    java_util_concurrent_user_guide

    5. **并发集合**: JUC提供了许多并发友好的集合类,如`ConcurrentHashMap`、`ConcurrentLinkedQueue`、`CopyOnWriteArrayList` 和 `CopyOnWriteArraySet`。这些集合在多线程环境下能保证数据的一致性和线程安全性。 ...

    java 多线程 队列工厂

    常见的`BlockingQueue`实现包括`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`等。 ### 5. 并发集合 Java并发库(`java.util.concurrent`包)提供了一系列优化的线程安全集合,如`...

    sycdtk-cmdline-jmxclient-master_java_

    这可能涉及到Java的并发库,如ExecutorService、ScheduledExecutorService,以及可能的队列数据结构,如Java的ConcurrentLinkedQueue或LinkedBlockingQueue,用于处理异步任务和批量操作。 在压缩包中的"cmdline-...

Global site tag (gtag.js) - Google Analytics