class Blockingqueue<T> {
int capity;
public Blockingqueue(int capity) {
this.capity = capity;
}
// 生产者线程要往里面添加内容,消费者线程要取出内容。
ReentrantLock lock = new ReentrantLock();
Condition productRoom = lock.newCondition();
Condition consumerRoom = lock.newCondition();
Queue<T> blockingQueue = new ArrayDeque<>();
public void put(T t) {
lock.lock();
try {
while (this.capity == blockingQueue.size()) {
productRoom.await();
}
blockingQueue.add(t);
consumerRoom.signalAll();
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
lock.unlock();
}
}
public T get() throws InterruptedException {
lock.lock();
try {
while (blockingQueue.isEmpty()) {
consumerRoom.await();
}
T t = blockingQueue.remove();
productRoom.signalAll();
return t;
} finally {
lock.unlock();
}
}
}
这一块儿没啥难度,主要是会生产者消费者模型就行