阻塞队列与普通的队列的区别就是当队列为空或者满时处理的逻辑不通,普通队列返回特殊值(比如null,false等等)而阻塞队列是阻塞当前线程直到队列有元素或者不为空。
下面我们使用Java中的wait/notify方法来实现一个自己的阻塞队列。
首先定义阻塞队列的接口:
public interface BlockingQueue<E>{
/**
* 往队列尾部添加一个元素,当队列满时阻塞当前线程
* @param e
*/
void put(E e);
/**
* 从队列首部取走一个元素,当队列为空时阻塞当前线程
* @return
*/
E get();
// 返回队列中元素的数量
int size();
}
具体实现:
import java.util.ArrayDeque;
public class ArrayBlockingQueue<E> implements BlockingQueue<E>{
private final static int DEFAULT_MAX_COUNT = 10;
private final int maxCount;
private final ArrayDeque<E> blockingQueue;
public ArrayBlockingQueue() {
this(DEFAULT_MAX_COUNT);
}
public ArrayBlockingQueue(int size) {
blockingQueue = new ArrayDeque<>(s