ArrayBlockingQueue原理分析-dequeue方法
这个是出队列的方法,主要是删除队列头部的元素并发返回给客户端
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方法相关推荐
- ArrayBlockingQueue原理分析-take方法
take方法是一种阻塞获取队列中元素的方法 它的实现原理很简单,有就删除没有就阻塞,注意这个阻塞是可以中断的,如果队列没有数据那么就加入notEmpty条件队列等待(有数据就直接取走,方法结束),如果 ...
- ArrayBlockingQueue原理分析-remove方法
remove方法是移除一个指定元素.看看它的实现代码 public boolean remove(Object o) { if (o == null) return false; final Obje ...
- ArrayBlockingQueue原理分析-put方法
put方法和add方法功能一样,差异是put方法如果队列满了,会阻塞.这个在最开始的时候说过.接下来看一下它的实现逻辑 public void put(E e) throws InterruptedE ...
- 蓝屏含义原理分析处理方法代码电脑计算机故障系统安全 - 蓝屏知识大全
目录 1含义2原理分析3处理方法4代码含义和解决-5原因分析6预防电脑蓝屏的- 含义 引蓝屏解释 1.故障检查信息 ***STOP 0x0000001E(0xC0000005,0xFDE38AF9 ...
- Atomic Integer 原理分析-其他方法
AtomicInteger的实现非常简单,所以我们可以很快就分析完它的实现原理,当然除了刚刚分析的这两个方法之外,还有其他的一些 比如它提供了compareAndSet,允许客户端基于AtomicIn ...
- ArrayBlockingQueue原理分析
构造方法 ArrayBlockingQueue提供了三个构造方法,分别如下. capacity: 表示数组的长度,也就是队列的长度 fair:表示是否为公平的阻塞队列,默认情况下构造的是非公平的阻塞队 ...
- Atomic Integer 原理分析-get方法
get方法只需要直接返回value的值就行,这里的value是通过Volatile修饰的,用来保证可见性 public final int get() { return value; }
- ArrayBlockingQueue原理分析-itrs.elementDequeued()
ArrayBlockingQueue中,实现了迭代器的功能,也就是可以通过迭代器来遍历阻塞队列中的元素 所以itrs.elementDequeued() 是用来更新迭代器中的元素数据的 takeInd ...
- 手写简易版链表及原理分析
好多人都觉得为什么要自己写这样的数据结构,变成里面不是有吗?为什么要去写,有这个疑问,其实这个疑问这我的脑海中也存在了很长一段时间,本人是学习java编程的,直接看java的集合框架不行吗?这个时候如 ...
最新文章
- bootstrap 冻结表格,冻结表头
- Android Activity 和 ViewGroup中事件触发和传递机制
- python北京理工大学推荐的书-2020最新的学Python编程的五本必读好书
- 线性结构--离散存储 链表讲解
- 攻防世界-web-unfinish-从0到1的解题历程writeup
- PowerDesigner生成mysql字段comment 注释
- 多个app用同一个签名文件_手机APP和手机网站的区别有哪些?
- mrunit_使用MRUnit测试Hadoop程序
- centos下升级jdk版本
- javascript 控制语句
- 读《微波工程(第三版)》笔记 (9:传输线模型)
- php写幻灯片,原生JS写的幻灯片
- Windows Mobile 触摸屏(Touch Panel)截获
- BIG5编码, GB编码(GB2312, GBK, ...), Unicode编码, UTF8, WideChar, MultiByte, Char 说明与区别
- 2021年T电梯修理考试题及T电梯修理考试报名
- 【DockerCE】RHEL 7.9完整安装DockerCE 20.10.5的包集合
- 品牌技术专场重磅加盟,看音视频如何引领新趋势
- 修正MP4文件头信息实现流式加载及播放
- 第五天 黑马十次方 NUXT框架、前台的搭建、前台活动模块的功能、前台招聘模块的功能
- 我国2016研发的超级计算机,我国超级计算机研制取得重大突破