jdk11源码--ArrayBlockingQueue源码分析
概述
上一篇文章jdk11源码--ReentrantLock之Condition源码分析中分析了ReentrantLock和Condition的源码,那么接下来看一下Condition在JDK中的具体应用。
ArrayBlockingQueue底层就是使用Condition来实现的。
BlockingQueue
BlockingQueue 阻塞队列,该类是一个接口,平时我们熟知的ArrayBlockingQueue,LinkedBlockingQueue等都是该接口的实现。
BlockingQueue 之所以说是阻塞的,是因为他可以在队列为空的时候,获取元素的线程会阻塞,直到有新的元素添加进来。当队列满时,添加元素的线程会阻塞,直到有线程从队列中取走了元素。这也是注明的==生产者消费者==问题。
当有面试官问你==生产者消费者==问题时,直接
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
jdk11源码--ReentrantLock之Condition源码分析
概述 在jdk11源码-ReentrantLock源码一文中分析了ReentrantLock源码。里面有讲述在多个线程加入队列时的AQS内部状态:==简单来说:condition的await和signal操作就是将node节点在这两个队列中转移的过程,这里重点关注waitstatus和nextwaiter两个字段。后面会逐行代码分析== 创建Condition 一个ReentrantLock可以创建多个ConditionCondition condition = lock.newCondition();实际是创建一个ConditionObject对象,ConditionObject的定义在AbstractQueuedSynchronizer中。 nextWaiter 在之前的文章中介绍了,一个node对象中有两个重要的对象属性: volati
- 下一篇
jdk11源码--LinkedBlockingQueue源码分析
概述 上一篇介绍了jdk11源码--ArrayBlockingQueue源码分析,接下来看一下LinkedBlockingQueue的实现。这两个阻塞队列最大的区别就是底层元素存储实现不同,ArrayBlockingQueue是基于==数组==,而LinkedBlockingQueue是基于==单向链表==。 LinkedBlockingQueue类图如下: LinkedBlockingQueue也是==FIFO==先进先出队列,其实现是 ==双锁队列two lock queue== 算法的变体,它内部维护了一个takeLock和一个putLock,也可以理解为读写锁的一种实现方式。==思想:锁分离,提高性能。==下面结合源码具体分析。 构造方法 网上有的说LinkedBlockingQueue是无界队列,其实不太准确,具体看下面的源码。下面两个构造方法,一个是有参数的,设置容量大小。这是有界队列。一个是无参数的构造方法,其内部实现是设置容量大小为Integer.MAX_VALUE的队列,这就是网络上说的无界队列,其实还是有界的,只不过比较大,是Integer.MAX_VALUE。 p...
相关文章
文章评论
共有0条评论来说两句吧...