java中LinkedBlockingQueue与ArrayBlockingQueue的异同

网友投稿 212 2023-07-08


java中LinkedBlockingQueue与ArrayBlockingQueue的异同

相同:

1、LinkedBlockingQueue和ArrayBlockingQueue都实现了BlockingQueue接口;

2、LinkedBlockingQueue和ArrayBlockingQueue都是可阻塞的队列

内部都是使用ReentrantLock和Condition来保证生产和消费的同步;

当队列为空,消费者线程被阻塞;当队列装满,生产者线程被阻塞;

使用Condition的方法来同步和通信:await()和signal()

不同:

1、由上图可以看出,他们的锁机制不同

LinkedBlockingQueue中的锁是分离的,生产者的锁PutLock,消费者的锁takeLock

而ArrayBlockingQueue生产者和消费者http://使用的是同一把锁;

2、他们的底层实现机制也不同

LinkedBlockingQueue内部维护的是一个链表结构

在生产和消费的时候,需要创建Node对象进行插入或移除,大批量数据的系统中,其对于GC的压力会比较大

而ArrayBlockingQueue内部维护RJdpGs了一个数组

在生产和消费的时候,是直接将枚举对象插入或移除的,不会产生或销毁任何额外的对象实例

3、构造时候的区别

LinkedBlockingQueue有默认的容量大小为:Integer.MAX_VALUE,当然也可以传入指定的容量大小

ArrayBlockingQueue在初始化的时候,必须传入一个容量大小的值

看其提供的构造方法就能知道

4、执行clear()方法

LinkedBlockingQueue执行clear方法时,会加上两把锁

5、统计元素的个数

LinkedBlockingQueue中使用了一个AtomicInteger对象来统计元素的个数

ArrayBlockingQueue则使用int类型来统计元素


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Jmeter3.0发布!版本更新到底更新了什么
下一篇:浅谈angular懒加载的一些坑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~