查看: 184|回复: 0

并发队列之LinkedBlockingQueue

[复制链接]
发表于 2020-2-17 03:50:55 | 显示全部楼层 |阅读模式
  上一篇我们看了一下这个队列ConcurrentLinkedQueue,那就是一个无界非阻塞链表,我们这次来看看LinkedBlockingQueue,这个队列看名字就知道是一个阻塞式队列(也就是一个单向链表),基于独占锁实现的,比力简单;

一.LinkedBlockingQueue基本结构
  内部也是有一个Node类,下图所示,item存 现实数据,next指向下一个节点,一个有参构造器,没啥好说的;


  我们可以看看这个队列有的一些属性,实在大概能猜出来就是生产者消耗者模型:
  1. //队列现实容量private final int capacity;//这个原子变量记载节点数量private final AtomicInteger count = new AtomicInteger();//头节点transient Node head;//尾节点private transient Node last;//这个锁用于控制多个线程从队列头部获取元素private final ReentrantLock takeLock = new ReentrantLock();//当队列为空,实验出队操作的线程就放到这条件变量里来private final Condition notEmpty = takeLock.newCondition();//用于控制多个线程往队列尾部添加元素private final ReentrantLock putLock = new ReentrantLock();//如果队列满了,实验入队操作的线程就丢到这里面来private final Condition notFull = putLock.newCondition();
复制代码

  构造器中可以看到,默认最大数量就是65536个,固然说也可以指定大小,我们一定程度上可以说这是一个有界阻塞队列;
[code]//默认队列最大的数量就是65536个public LinkedBlockingQueue() {        this(Integer.MAX_VALUE);    }//也可以指定队列大小,默认头节点和尾节点都是指向哨兵节点public LinkedBlockingQueue(int capacity) {    if (capacity

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?用户注册

x

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表