leetcode原题:1188. 设计有限阻塞队列
实现一个拥有如下方法的线程安全有限阻塞队列:
阻塞队列,首先想到要使用ReetrantLock来实现锁,同时需要使用lock来创建两个的等待条件,一个是非空一个是非满,生产者线程等待非满条件入队,消费者线程等待非空条件出队。同时题目需求,入队在队首,出队在队尾,可以选择使用LinkList中的addFirst和removeLast来实现。
这样大框架就出来了。
class BoundedBlockingQueue {
private LinkedList<Integer> innerQueue;
private int capacity;
private ReentrantLock lock = new ReentrantLock();
private Condition notFull = lock.newCondition();
private Condition notEmpty = lock.newCondition();
public BoundedBlockingQueue(int capacity) {
innerQueue = new LinkedList<Integer>();
this.capacity = capacity;
}
public void enqueue(int element) throws InterruptedException {
try{
lock.lockInterruptibly();
while(size() == capacity){
notFull.await();
}
innerQueue.addFirst(element);
notEmpty.signalAll();
}finally{
lock.unlock();
}
}
public int dequeue() throws InterruptedException {
try{
lock.lockInterruptibly();
while(size() == 0){
notEmpty.await();
}
int result = innerQueue.removeLast();
notFull.signalAll();
return result;
}finally{
lock.unlock();
}
}
public int size() {
try{
lock.lock();
return innerQueue.size();
}finally{
lock.unlock();
}
}
}
原文:https://www.cnblogs.com/ging/p/14239631.html