Poi vedo che di Urna istanzi 1 oggetto e lo fai usare sia a Producer che a Consumer (che eseguono in thread separati). Questo porta al fatto che la classe Urna deve essere scritta per gestire correttamente la sincronizzazione tra i thread.
La sincronizzazione dei thread la faccio utilizzando synchronized per i metodi.

C'è solo una questione: la classe Consumer non l'hai postata ... non so dove l'hai definita e come è fatta. In sostanza: che cosa "sa" della interfaccia utente?
questa è la classe

codice:
public class Consumer implements Runnable{
	
	private int delay;
	private Urna buffer;
	
	public Consumer (Urna buffer,int delay ){
		this.delay=delay;
		this.buffer=buffer;
	}

	public void run() {
		for(int i=0;i<5;i++){
			int info = buffer.remove();
			System.out.println(info);
			try {
				Thread.sleep(delay);
			}catch (InterruptedException ex){
				ex.getMessage();
			}
		}
	}

}
quindi non conosce niente dell'interfaccia...

In Consumer puoi fare in modo che esso possa avere (in qualunque modo) un riferimento o al text field o alla istanza di Gui?
quindi devo creare un oggetto Gui e poi da li, arrivare al jTextField e cont setText inserire le info giusto??