视频课程
小黑屋思过中,禁止观看!
评论并刷新后可见

您需要在视频最下面评论并刷新后,方可查看完整视频

视频课程
立即观看
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
课程视频
开始学习
会员专享

视频合集

深入LinkedBlockingQueue实现原理

  • 课程笔记
  • 问答交流

并发队列:阻塞与非阻塞队列详解,分别谈到了实现并发队列的两种方式。
方式1:加锁,这种实现方式就是我们常说的阻塞队列。
方式2:使用循环CAS算法实现,这种方式实现队列称之为非阻塞队列。
之前我讲解了非阻塞队列ConcurrentLinkedQueue的实现,以及ArrayBlockingQueue的实现。

为了助大家掌握好LinkedBlockingQueue,这节课我会重点讲解以下5点:

1.LinkedBlockingQueue介绍

2.LinkedBlockingQueue的数据结构

3.LinkedBlockingQueue的核心方法

4.LinkedBlockingQueue的源码实现

5.ArrayBlockingQueue与LinkedBlockingQueue的比较等

LinkedBlockingQueue的数据结构

评论交流
  1. 李鸿翼

    画出LinkedBlockingQueue的put与take流程?
    见下图

    最后谈谈LinkedBlockingQueue与ArrayBlockingQueue的核心区别?

    1.底层容器不同,LinkedBlockingQueue是单项链表,ArrayBlockingQueue是数组
    2.锁并发度不同,LinkedBlockingQueue的put和take是不同锁,ArrayBlockingQueue的put和take共用一把锁
    记录当前元素数量的count,因为LinkedBlockingQueue存在put和take的并发,所以采用了基于cas的原子计数操作类AtomicInteger

  2. 路正银

    谈谈LinkedBlockingQueue与ArrayBlockingQueue的核心区别?
    1、容器不一样,LinkedBlockingQueue的阻塞队列是基于链表,ArrayBlockingQueue是基于数组
    2、锁实现不一样,ArrayBlockingQueue是一把锁,入队出队用同一把锁,LinkedBlockingQueue是两把锁,分别用来控制入队和出队
    3、LinkedBlockingQueue的count值(阻塞队列的长度)是用AtomicInteger来修饰的,LinkedBlockingQueue入队出队是由两把锁控制的,需要保证原子性
    4、LinkedBlockingQueue建议用有界的方式,如果用无界的方式来定义,在生产能力持续大于消费能力的时候,会无限的消耗内存

    LinkedBlockingQueue是两把锁(put锁和take锁),生产和消费分离,多线程环境下可以释放生产能力和消费能力
    LinkedBlockingQueue的put与take流程图如下:

    • mikechen

      快速抓住重点,这个风格非常好 ✗棒棒的✗