ArrayBlockingQueue与LinkedBlockingQueue对比

Posted 北城cheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayBlockingQueue与LinkedBlockingQueue对比相关的知识,希望对你有一定的参考价值。

队列中锁的实现不同
ArrayBlockingQueue实现的队列中的锁是没有分离的,即生产和消费用的是同一个锁;
LinkedBlockingQueue实现的队列中的锁是分离的,即生产用的是putLock,消费是takeLock

因此,LinkedBlockingQueue的一大优点也是ArrayBlockingQueue所不具备的,就是在多个CPU的情况下,LinkedBlockingQueue可以做到同一时刻既消费、又生产。


在生产或消费时操作不同
ArrayBlockingQueue实现的队列中在生产和消费的时候,是直接将枚举对象插入或移除的;
LinkedBlockingQueue实现的队列中在生产和消费的时候,需要把枚举对象转换为Node进行插入或移除,会影响性能。


队列大小初始化方式不同
ArrayBlockingQueue实现的队列中必须指定队列的大小;
LinkedBlockingQueue实现的队列中可以不指定队列的大小,但是默认是Integer.MAX_VALUE*/,可以当做无界。

以上是关于ArrayBlockingQueue与LinkedBlockingQueue对比的主要内容,如果未能解决你的问题,请参考以下文章

LinkedBlockingQueue与ArrayBlockingQueue

java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

JUC多线程:阻塞队列ArrayBlockingQueue与LinkedBlockingQueue

JUC系列并发容器之阻塞队列Overview

ArrayBlockingQueue使用