这个是出队列的方法,主要是删除队列头部的元素并发返回给客户端

takeIndex,是用来记录拿数据的索引值

private E dequeue() { // assert lock.getHoldCount() == 1; // assert items[takeIndex] != null; final Object[] items = this.items; @SuppressWarnings("unchecked") E x = (E) items[takeIndex]; //默认获取0位置的元素 items[takeIndex] = null;//将该位置的元素设置为   空 if (++takeIndex == items.length)//这里的作用也是一样,如果拿到数组的最大值,那么重置为0,继续从头部位置开始获取数据 takeIndex = 0; count--;//记录 元素个数递减 if (itrs != null) itrs.elementDequeued();//同时更新迭代器中的元素数据 notFull.signal();//触发 因为队列满了以后导致的被阻塞的线程 return x;
}

ArrayBlockingQueue原理分析-dequeue方法相关推荐

  1. ArrayBlockingQueue原理分析-take方法

    take方法是一种阻塞获取队列中元素的方法 它的实现原理很简单,有就删除没有就阻塞,注意这个阻塞是可以中断的,如果队列没有数据那么就加入notEmpty条件队列等待(有数据就直接取走,方法结束),如果 ...

  2. ArrayBlockingQueue原理分析-remove方法

    remove方法是移除一个指定元素.看看它的实现代码 public boolean remove(Object o) { if (o == null) return false; final Obje ...

  3. ArrayBlockingQueue原理分析-put方法

    put方法和add方法功能一样,差异是put方法如果队列满了,会阻塞.这个在最开始的时候说过.接下来看一下它的实现逻辑 public void put(E e) throws InterruptedE ...

  4. 蓝屏含义原理分析处理方法代码电脑计算机故障系统安全 - 蓝屏知识大全

    目录 1含义2原理分析3处理方法4代码含义和解决-5原因分析6预防电脑蓝屏的-   含义 引蓝屏解释 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9 ...

  5. Atomic Integer 原理分析-其他方法

    AtomicInteger的实现非常简单,所以我们可以很快就分析完它的实现原理,当然除了刚刚分析的这两个方法之外,还有其他的一些 比如它提供了compareAndSet,允许客户端基于AtomicIn ...

  6. ArrayBlockingQueue原理分析

    构造方法 ArrayBlockingQueue提供了三个构造方法,分别如下. capacity: 表示数组的长度,也就是队列的长度 fair:表示是否为公平的阻塞队列,默认情况下构造的是非公平的阻塞队 ...

  7. Atomic Integer 原理分析-get方法

    get方法只需要直接返回value的值就行,这里的value是通过Volatile修饰的,用来保证可见性 public final int get() { return value; }

  8. ArrayBlockingQueue原理分析-itrs.elementDequeued()

    ArrayBlockingQueue中,实现了迭代器的功能,也就是可以通过迭代器来遍历阻塞队列中的元素 所以itrs.elementDequeued() 是用来更新迭代器中的元素数据的 takeInd ...

  9. 手写简易版链表及原理分析

    好多人都觉得为什么要自己写这样的数据结构,变成里面不是有吗?为什么要去写,有这个疑问,其实这个疑问这我的脑海中也存在了很长一段时间,本人是学习java编程的,直接看java的集合框架不行吗?这个时候如 ...

最新文章

  1. bootstrap 冻结表格,冻结表头
  2. Android Activity 和 ViewGroup中事件触发和传递机制
  3. python北京理工大学推荐的书-2020最新的学Python编程的五本必读好书
  4. 线性结构--离散存储 链表讲解
  5. 攻防世界-web-unfinish-从0到1的解题历程writeup
  6. PowerDesigner生成mysql字段comment 注释
  7. 多个app用同一个签名文件_手机APP和手机网站的区别有哪些?
  8. mrunit_使用MRUnit测试Hadoop程序
  9. centos下升级jdk版本
  10. javascript 控制语句
  11. 读《微波工程(第三版)》笔记 (9:传输线模型)
  12. php写幻灯片,原生JS写的幻灯片
  13. Windows Mobile 触摸屏(Touch Panel)截获
  14. BIG5编码, GB编码(GB2312, GBK, ...), Unicode编码, UTF8, WideChar, MultiByte, Char 说明与区别
  15. 2021年T电梯修理考试题及T电梯修理考试报名
  16. 【DockerCE】RHEL 7.9完整安装DockerCE 20.10.5的包集合
  17. 品牌技术专场重磅加盟,看音视频如何引领新趋势
  18. 修正MP4文件头信息实现流式加载及播放
  19. 第五天 黑马十次方 NUXT框架、前台的搭建、前台活动模块的功能、前台招聘模块的功能
  20. 我国2016研发的超级计算机,我国超级计算机研制取得重大突破

热门文章

  1. PowerShell字体颜色修改
  2. 2018/5/14~2018/5/18 周记
  3. Consumer group理解深入
  4. Java两则故障分析和常见连接超时时间
  5. 使用Helm优化Kubernetes下的研发体验:基础设施即代码
  6. Confluence 6 为发送邮件配置服务器
  7. 数据库的日常管理经验浅谈
  8. 多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目
  9. 如何调整Loadrunner中Vuser的数量限制
  10. LINQ根据某字段GroupBy