Ch9-Java Collections 之 ArrayBlockingQueue
January 31, 2020
java.util.concurrent.ArrayBlockingQueue
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。