Sincronizar varias threads

oi pessoal.
to c 1 problema, estou a tentar k 3 threads insiram um valor numa classe comum, antes k outra thread retire um valor dessa mesma classe. consegui sincronizar com 2 threads, uma a inserir e so depois a outra a retirar, mas com 3 a inserir n consigo. o codigo p 2 threads k to a utilizar é o seguinte:

public class Banca {

boolean verifica=false;
int valor;

public static void main(String[] args) {

  Banca b=new Banca();
  Produtor p=new Produtor(b);
  Consumidor c=new Consumidor(b);
}

public synchronized void insere(int valor){

  while (verifica) {
    try {
      wait();
    } catch (InterruptedException e) {}
  }
    this.valor=valor;
    System.out.println("Produtor:   "+valor);
    verifica = true;
    notify();
}

public synchronized void remove(){

  while (!verifica) {
    try {
      wait();
    } catch (InterruptedException e) {}
  }
    System.out.println("Consumidor: "+valor);
    this.valor=0;
    verifica = false;
    notify();
}

}
///////////////////////////////////////////////////
public class Produtor extends Thread{

Banca banca;
Random r=new Random();

public Produtor(Banca banca){
this.banca=banca;
start();
}

public void run(){

boolean test=false;
int i = 0;
  while (i!=10) {
    i++;
    banca.insere(r.nextInt(20)+1);
  }

}

}

o codigo do consumidor é identico ao do produtor

ja tentei varias formas, com 1 metodo k va verificando com boolean se ja inseriu a 1ª thread a 2ª e etc mas n tive muito sucesso
disseram-me k poderia arranjar outra thread p sincronizar estas mas n sei como
se alguem me poder ajudar agradeço

Olá!

Vou arriscar um palpite:

Vc já pensou em inserir um contador no seu método insere?
Mais ou menos assim:

if ((cont% 3) == 0){
verifica = true;
cont = 1;
}

O cont inicia com 1 e a cada inserção, cont++.

Dessa forma só é possível ler após 3 inserções.

Valeu?