背景
- 前几天看到一道面试题:实现一个阻塞队列,就萌生了动手操作一把的想法。看着挺简单的,思路也和清晰,就是用ReentantLock和Condition来实现,但在实际操作过程中还是遇到了问题,总结一下,仅供参考。
阻塞队列第一版
- 先附上第一版的代码。内部存储,为了方便就使用LinkedList来实现了。
import java.util.LinkedList;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
/**
* NOTE:
*
* @author lizhiyang
* @Date 2019-11-27 19:38
*/
public class MyBlockingQueue<E> {
private LinkedList<E> list = new LinkedList<>();
private ReentrantLock lock = new ReentrantLock();
private Condition notFullCondition = lock.newCondition();
private Condition notEmptyCondition = lock.newCondition();
private int maxSize = 0;
public MyBlockingQueue(int maxSize) {
this.maxSize = maxSize;
}
public void push(E e) throws InterruptedException {
lock.lo