Ch9-Java Collections 之 ArrayBlockingQueue

Ch9-Java Collections 之 ArrayBlockingQueue

January 31, 2020
Java | JUC
java

java.util.concurrent.ArrayBlockingQueue

structure

1. 添加 #

操作 操作成功 操作失败
offer 返回 true 队列已满,返回 false
add 返回 true 队列已满,抛异常
put 不返回 队列已满,阻塞

1.1 put 说明 #

首先获取 lock 对队列进行进行加锁,如果队列已满,那么将当前线程放入到 notFull 这个条件队列里面。如果队列没有满,那么入队成功,并试着唤醒 notEmpy 里面的一个线程。最后释放 lock。

2. 获取 #

操作 操作成功 操作失败
remove 返回 true 队列为空,返回 false
poll 返回元素 队列为空,返回 nul。
take 返回元素 队列为空,阻塞

2.1 take 说明 #

首先获取 lock 对队列进行加锁,如果队列为空,则将当前线程放到 notEmpty 这个条件队列里面。如果队列不为空,那么出队成功,并试着唤醒 notFull 里面的一个线程。最后释放 lock。

3. 参考文献 #

基于 AQS 的条件队列彻底理解 ArrayBlockingQueue