栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

什么时候更喜欢LinkedBlockingQueue而不是ArrayBlockingQueue?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么时候更喜欢LinkedBlockingQueue而不是ArrayBlockingQueue?

蜘蛛侠鲍里斯(Boris the
Spider)已经概述了

ArrayBlockingQueue
和之间最明显的区别
linkedBlockingQueue
-前者始终是有界的,而后者可以是无界的。

因此,如果您需要无限制的阻塞队列,

linkedBlockingQueue
或者将其
linkedTransferQueue
用作工具箱
BlockingQueue
中的最佳选择
java.util.concurrent

但是,假设您需要一个有限的阻塞队列。最后,您应该基于对真实工作负载进行模拟的广泛实验来选择一种实现。不过,以下是一些注释,可以帮助您进行选择或解释实验结果:

  • ArrayBlockingQueue
    可以使用可配置(开/关)调度公平性策略创建。如果您需要公平或希望避免生产者/消费者饥饿,那么这很好,但是这会浪费您的吞吐量。
  • ArrayBlockingQueue
    预分配其后备数组,因此它在使用过程中不会分配节点,但会立即占用相当大的内存块,如果您的内存碎片化,则可能会出现问题。
  • ArrayBlockingQueue
    应该具有较小的性能差异,因为它总体上具有较少的运动部件,它使用了一种更简单且不太复杂的单锁算法,在使用过程中不创建节点,并且其缓存行为应相当一致。
  • linkedBlockingQueue
    应该具有更好的吞吐量,因为它为头部和尾部使用了单独的锁。
  • linkedBlockingQueue
    不会预分配节点,这意味着它的内存占用空间将大致与其大小匹配,但这也意味着它将为分配和释放节点带来一些工作。
  • linkedBlockingQueue
    缓存行为可能更糟,这可能会影响其自身的性能,还可能由于错误共享而影响其他组件的性能。

根据您的使用情况,并做了多少你关心性能,你可能还需要的外观之外

java.util.concurrent
,并考虑干扰物(一个非常快,但有些专门界无阻塞环形缓冲区)或JCTools(各种界或无界根据生产者和消费者的数量,具有不同保证的队列)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/440892.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号