1.使用wait和notifyALl实现
class Queue{
private List<String> data = new ArrayList<>();
private int maxSize = 10;
public Queue(int maxSize){
this.maxSize = maxSize;
}
public synchronized void enqueue(String string) throws InterruptedException {
while(this.data.size() == this.maxSize){
this.wait(); // 队列已满,阻塞
}
if(this.data.size() == 0){ // 队列为空
this.notifyAll(); // 唤醒所有
}
data.add(UUID.randomUUID().toString().substring(0,4));
}
public synchronized String dequeue() throws InterruptedException {
while(this.data.size() == 0){
this.wait();
}
if(this.data.size() == this.maxSize){
this.notifyAll();
}
return data.remove(0);
}
}