• ConcurrentLinkedQueue和LinkedBlockingQueue区别


    Concurrent类型基于lock-free,在常见的多线程访问

    下面这张图是Java并发类库提供的各种各样的线程安全队列实现,注意,图中并未将非线程安全部分包含进来。

    LinkedBlockingDeque无非是用一个独占锁来保持线程安全,然后用Condition来做阻塞操作

    ConcurrentLinkedDeque不是阻塞队列所以没有用到条件原语

    在日常开发中,如何选择各种队列呢?

    以LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue为例,根据需求可以从很多方面考量

    1、考虑应用场景中对队列边界的要求。ArrayBlockingQueue是有明确的容量限制的,而LinkedBlockingQueue则取决于我们是否在创建时指定,

    SynchronousQueue则干脆不能缓存任何元素。

    2、从空间利用角度,数组结构的ArrayBlockingQueue要比LinkedBlockingQueue紧凑,因为其不需要创建所谓节点,但是其初始分配阶段就需要一段连续的空间,所以初始内存需求更大。

    3、通用场景中,LinkedBlockingQueue的吞吐量一般优于ArrayBlockingQueue,因为它实现了更加细粒度的锁操作

    4、ArrayBlockingQueue实现比较简单,性能更加预测,属于表现稳定的“选手”

    5、如果我们需要实现的是两个线程之间接力性(handoff)的场景,你可能会选择CountDownLatch,但是SynchronousQueue也是完美符合这种场景的,而且线程间协调和数据传输统一起来,代码更加规范

    6、可能令人意外的是,很多时候SynchronousQueue的性能表现,往往大大超过其他表现,尤其是在队列元素较小的场景。

  • 相关阅读:
    python里面的xlrd模块详解以及样例
    关于DOM的事件操作
    python正则表达式去除文本中间的换行符
    文本分类问题汇总
    pip安装问题
    3NF的无损连接和保持函数依赖的分解、BCNF的无损连接的分解
    Pyhton基本图形绘制
    软件过程模型
    常见算法的时间与空间复杂度
    随笔
  • 原文地址:https://www.cnblogs.com/gujiande/p/9485493.html
Copyright © 2020-2023  润新知