java中LinkedBlockingQueue与ArrayBlockingQueue的异同

 更新时间:2016年08月20日 11:38:18   投稿:mdxy-dxy  
这篇文章主要介绍了java中LinkedBlockingQueue与ArrayBlockingQueue的异同,需要的朋友可以参考下

相同:

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

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

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

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

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

不同:

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

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

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

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

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

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

  而ArrayBlockingQueue内部维护了一个数组

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

 3、构造时候的区别

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

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

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

4、执行clear()方法

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

 5、统计元素的个数

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

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

相关文章

  • SpringBoot中jar打包并部署到Tomcat

    SpringBoot中jar打包并部署到Tomcat

    最近做了一个SpringBoot项目,今天介绍一下SpringBoot中jar打包并部署到Tomcat,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Java源码解析之可重入锁ReentrantLock

    Java源码解析之可重入锁ReentrantLock

    今天小编就为大家分享一篇关于Java源码解析之可重入锁ReentrantLock,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 图文并茂讲解RocketMQ消息类别

    图文并茂讲解RocketMQ消息类别

    这篇文章主要介绍了图文并茂讲解RocketMQ消息类别,RocketMQ对于消息提供了很多用法,包括:同步消息、异步消息、单向发送、顺序消息、延时消息、批量消息、过滤消息、事务消息等
    2022-12-12
  • 聊聊drools session的不同

    聊聊drools session的不同

    在drools中存在2种session,一种是有状态的Session (Stateful Session),另外一种一种是无状态的Session (Stateless Session,本文通过实例代码给大家介绍drools session的不同,感兴趣的朋友一起看看吧
    2022-05-05
  • IDEA插件开发之环境搭建过程图文详解

    IDEA插件开发之环境搭建过程图文详解

    这篇文章主要介绍了IDEA插件开发之环境搭建过程,本文通过图文并茂实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 分享java中设置代理的两种方式

    分享java中设置代理的两种方式

    有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http、https、ftp、socks代理。比如在IE浏览器设置代理,这里简单介绍下,需要的朋友可以参考下
    2015-12-12
  • spring cloud zuul 与 sentinel的结合使用操作

    spring cloud zuul 与 sentinel的结合使用操作

    这篇文章主要介绍了spring cloud zuul 与 sentinel 的结合使用操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • spring-boot实现增加自定义filter(新)

    spring-boot实现增加自定义filter(新)

    本篇文章主要介绍了spring-boot实现增加自定义filter(新),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 电脑上安装多个JDK版本时该如何自由切换(详细图文)

    电脑上安装多个JDK版本时该如何自由切换(详细图文)

    我们在学习的过程中经常用到不同的jdk版本,那么如何在一台电脑上同时安装多个jdk版本并进行切换呢,这篇文章主要给大家介绍了关于电脑上安装多个JDK版本时该如何自由切换的相关资料,需要的朋友可以参考下
    2023-10-10
  • javaweb图书商城设计之分类模块(2)

    javaweb图书商城设计之分类模块(2)

    这篇文章主要为大家详细介绍了javaweb图书商城设计之分类模块的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11

最新评论