前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ArrayBlockingQueue与LinkedBlockingQueue

ArrayBlockingQueue与LinkedBlockingQueue

作者头像
code4it
发布2018-09-17 15:00:37
1.4K0
发布2018-09-17 15:00:37
举报
文章被收录于专栏:码匠的流水账码匠的流水账

本文主要简单介绍下ArrayBlockingQueue与LinkedBlockingQueue。

对比

queue

阻塞与否

是否有界

线程安全保障

适用场景

注意事项

ArrayBlockingQueue

阻塞

有界

一把全局锁

生产消费模型,平衡两边处理速度

用于存储队列元素的存储空间是预先分配的,使用过程中内存开销较小(无须动态申请存储空间)

LinkedBlockingQueue

阻塞

可配置

存取采用2把锁

生产消费模型,平衡两边处理速度

无界的时候注意内存溢出问题,用于存储队列元素的存储空间是在其使用过程中动态分配的,因此它可能会增加JVM垃圾回收的负担。

ConcurrentLinkedQueue

非阻塞

无界

CAS

对全局的集合进行操作的场景

size() 是要遍历一遍集合,慎用

内存方面

  • ArrayBlockingQueue 用于存储队列元素的存储空间是预先分配的,使用过程中内存开销较小(无须动态申请存储空间)
  • LinkedBlockingQueue 用于存储队列元素的存储空间是在其使用过程中动态分配的,因此它可能会增加JVM垃圾回收的负担。

有界无界

  • ArrayBlockingQueue 有界,适合已知最大存储容量的场景
  • LinkedBlockingQueue 可有界可以无界

吞吐量

LinkedBlockingQueue在大多数并发的场景下吞吐量比ArrayBlockingQueue,但是性能不稳定。

Linked queues typically have higher throughput than array-based queues but less predictable performance in most concurrent applications. 这个主要针对LinkedBlockingQueue是无界的场景来说,由于无界,所以offer以及poll的吞吐量通常比ArrayBlockingQueue高。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对比
    • 内存方面
      • 有界无界
        • 吞吐量
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档