take方法是一种阻塞获取队列中元素的方法

它的实现原理很简单,有就删除没有就阻塞,注意这个阻塞是可以中断的,如果队列没有数据那么就加入notEmpty条件队列等待(有数据就直接取走,方法结束),如果有新的put线程添加了数据,那么put操作将会唤醒take线程,执行take操作。

public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { while (count == 0) notEmpty.await(); //如果队列为空的情况下,直接通过await方法阻塞 return dequeue(); } finally { lock.unlock(); }
}

如果队列中添加了元素,那么这个时候,会在enqueue中调用notempty.signal唤醒take线程来获得元素

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

  1. ArrayBlockingQueue原理分析-remove方法

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

  2. ArrayBlockingQueue原理分析-dequeue方法

    这个是出队列的方法,主要是删除队列头部的元素并发返回给客户端 takeIndex,是用来记录拿数据的索引值 private E dequeue() { // assert lock.getHoldCo ...

  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. matlab基本操作--基本数学定义
  2. 办公软件Office 2010下载安装介绍
  3. Scala编程入门---数组操作之数组转换
  4. poi写入Excel
  5. Mysql之一:mysqldump和LVM逻辑卷快照
  6. iPhone 13系列要上全新配色:全系存储容量调整
  7. 【ElasticSearch】Es 源码之 SearchTransportService 源码解读
  8. Sublime Text 教程
  9. [转载] python 从右到左字符串替换方法实现
  10. 在Java中获取系统属性
  11. Spring Boot源码分析
  12. MySQL查询日期类数据常用函数
  13. wpf中的默认右键菜单中的复制、粘贴、剪贴等没有本地化的解决方式
  14. 制作PPT如何快速绘制透视立体图
  15. 奥克兰大学 计算机硕士 GPA,申请奥克兰大学需要GPA成绩吗
  16. OracleRAC基本概念及入门
  17. COMPILATION ERROR
  18. 计算机基础土星,2012年一级B笔试模拟343
  19. 如何修改网页里面的文字和复制网页中限制的文字
  20. 底层网络知识详解:从二层到三层-第7讲-ICMP与ping:投石问路的侦察兵

热门文章

  1. 面试中常见的查找与排序
  2. Java并发——结合CountDownLatch源码、Semaphore源码及ReentrantLock源码来看AQS原理
  3. 论文总结(negFIN: An efficient algorithm for fast mining frequent itemsets)
  4. 《从0到1学习Flink》—— Apache Flink 介绍
  5. HTTPS安全超文本传输协议
  6. maven依赖传递和排除依赖冲突
  7. 如何防止XshellPortable、putty、SecureCRT等断网造成Linux命令中断
  8. 有关Struts2a的ction直接使用response异步问题
  9. JSON.stringify()中文乱码
  10. HTML5与CSS3权威指南.pdf5