Вот простая реализация:
public synchronized void enqueue(Object item)throws InterruptedException { while(this.queue.size() == this.limit) { wait(); } if(this.queue.size() == 0) { notifyAll(); } this.queue.add(item);}
Потому что, если вы посмотрите на типичную очередь, она выглядит так