Salve ragazzi ho questo problemino da risolvere:

Esercizio P.1. Realizzate una classe Queue (coda) i cui metodi add e remove siano sincronizzati. Fornite un thread, chiamato produttore, che continua a inserire stringhe
nella coda finché ci sono meno di 10 elementi in essa. Quando la coda diventa troppo
piena, il thread aspetta. Come stringhe, usate semplicemente le indicazioni orarie fornite
da new Date().toString(). Fornite poi un secondo thread, detto consumatore,
che continua a rimuovere stringhe dalla cosa, stampandole, finché la coda non è vuota.
Quando la coda è vuota, il thread aspetta. Sia il thread produttore che il thread
consumatore devono eseguire 1000 iterazioni. (Per semplicità ho usato una variabile Integer count che decremento e incremento a seconda dei casi).

Il codice che ho generato è il seguente:

Classe Coda

codice:
mport java.util.LinkedList;
import java.util.Queue;


public class Coda {
	public Coda(){}
	private Integer count = 0;
	public Integer getCount(){return count;} 
	private Queue<Integer> C = new LinkedList<Integer>();
	public synchronized void add(Integer S){
	try	{
		while(count>=10)
			wait();
	}catch(InterruptedException e){}
		C.add(S);
		count++;
	}
	public synchronized void remove(){
		C.remove();
		count--;
		notifyAll();
		}
	}
Classe Produttore

codice:
public class Produttore extends Thread {
	
	private int iterazioni;
	private Coda C;
	
	public Produttore(int it,Coda CODA){iterazioni = it;C=CODA;}
	
	public void run(){
		
	try{
		
		for(int i=0;i<iterazioni && !isInterrupted();i++){
			C.add(C.getCount());
			sleep(1000);
		}	
		}catch(InterruptedException e){System.out.println(e);}
	}
		}
Classe Consumatore

codice:
public class Consumatore extends Thread{
	
	private int iterazioni;
	private Coda C;
	
	public Consumatore(int it,Coda CODA){iterazioni = it;C=CODA;}
	
	public void run(){
		
	try{
		
		for(int i=0;i<iterazioni && !isInterrupted();i++){
			
			System.out.println(C.getCount());
			C.remove();
			sleep(1000);
		}	
		}catch(InterruptedException e){System.out.println(e);}
		}
 }
MAIN:

codice:
public class EsempioMultithread {
	public static void main(String args[]){
		Coda C= new Coda();
		Produttore Prod = new Produttore(1000,C);
		Consumatore Cons = new Consumatore(1000, C);
		Prod.start();
		Cons.start();
		}
}
Dove ho sbagliato? Vorrei che il programma mia dia in uscita [10,9,8,7,6,5,4,3,2,1,0][10,9,8,7,6,5,4,3,2,1,0] invece l'uscita è: [1,0,0,...,0] come se il thread Produttore non parte mai quando invece dovrebbe essere il primo a partire e una volta che count==10 dovrebbe partire il consumatore che stampa e decrementa la coda e quindi count. Quando count diventa 0 riparte Produttore.
Spero che un folle mi dia una mano :S