gpt4 book ai didi

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java中LinkedBlockingQueue与ArrayBlockingQueue的异同由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

相同:

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

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

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

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

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

不同:

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

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

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

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

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同java中LinkedBlockingQueue与ArrayBlockingQueue的异同

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

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

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

 3、构造时候的区别 。

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

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

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

4、执行clear()方法 。

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

 5、统计元素的个数 。

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

java中LinkedBlockingQueue与ArrayBlockingQueue的异同

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

最后此篇关于java中LinkedBlockingQueue与ArrayBlockingQueue的异同的文章就讲到这里了,如果你想了解更多关于java中LinkedBlockingQueue与ArrayBlockingQueue的异同的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com