文章目录
BlockingQueue原理
BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等。
它们的区别主要体现在存储结构上或对元素操作上的不同,但是对于put与take操作的原理是类似的。
下面以ArrayBlockingQueue源码为例,来说明BlockingQueue的实现原理
ArrayBlockingQueue源码分析
首先看一下ArrayBlockingQueue的构造函数,它初始化了put和take函数中用到的关键成员变量,这两个变量的类型分别是ReentrantLock和Condition:
- ReentrantLock实例:是AbstractQueuedSynchronizer(AQS)的子类,用于实现锁同步机制
- Condition实例:newCondition函数返回的Condition实例,是定义在AQS类内部的ConditionObject类,该类可以直接调用AQS相关的函数。在这用于实现等待队列机制
构造函数源码如下: