Estou vendo alguns conceitos de monitores, mas gostaria de ver um código que realmente funcionasse, pode ser bem simples, utilizando basicamente signal / wait / notify, e uma pequena explicação sobre o código.
Existem várias classes que solucionam isso no Java:
a) LinkedBlockingQueue: Representa uma fila de processos sincronizada. Você nem precisa da variável, pois ela controla isso para você;
b) Você pode criar o mecanismo você mesmo com wait() e notify();
c) Você pode usar as classes do pacote java.util.concurrent, como Lock ou Semaphore.
O que você não pode é não entender o conceito. Ele é bastante complexo, mas threads não são um assunto tão inutilizado quanto parece.
Cedo ou tarde você terá que controlar mais de uma.
Como sugestão, leia esses dois tutoriais escritos pelo Brian Goetz:
A fila não é nenhum dos 2. A classe Lock é o equivalente do synchronized e a classe Condition é o equivalente do wait().
Por acaso você leu os dois tutoriais que te passei?