J'essaie de créer une file d'attente bloquante en utilisant les méthodes notifyAll() et wait() avec un objet partagé. Mais ce code lève une IllegalMonitorStateException. Où dois-je apporter la modification ?
public class BlockingQueueNotifyAll<E> {
private Queue<E> queue;
private int max;
private Object sharedQ = new Object();
public BlockingQueueNotifyAll(int size) {
queue = new LinkedList<>();
this.max = size;
}
public synchronized void put(E e) {
while(queue.size() == max) {
try {
sharedQ.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
queue.add(e);
sharedQ.notifyAll();
}
public synchronized E take() throws InterruptedException {
while(queue.size() == 0) {
sharedQ.wait();
}
E item = queue.remove();
sharedQ.notifyAll();
return item;
}
}