codice:
public
class
Produttore
extends
	Thread
{
	//*	costruttore
	public
	Produttore
	(
		MemoriaCircolareS m,
		int tam,
		int id
	)
	{
		memoria = m;
		tempoAttesaMax = tam;
		this.id = id;
	}              
   
	/**
	 *	metodo eseguito quando il thread e' avviato con il metodo start ed ad
	 *	ogni successivo scheduling per l'esecuzione
	 */
	public
	void
	run()
	{
		String dato;
		//	il produttore genera messaggi all'infinito
		while ( true )
		{
			//	sospenda il produttore per un certo periodo di tempo
			int tempoAttesa = (int) ( tempoAttesaMax * Math.random() );
			System.out.println(
				"Produttore " + id + " sospeso per "
				+ tempoAttesa + " secondi"
			);
			try
			{
				sleep(tempoAttesa*1000); 
			}
			catch(InterruptedException e) {}
			contatore++;
			dato = new String( "[prodotto " + contatore
				+ " del produttore " + id + "]" );
			System.out.println("Produttore " + id + " produce " + dato );
			//	deposita il messaggio sulla memoria
			try
			{
				memoria.deposita( dato );
			}
			catch ( Exception e )
			{
				System.err.println( e.toString() );
			}
		}
	}
   
	private MemoriaCircolareS memoria;
	private int tempoAttesaMax;
	private int id;
	private int contatore = 0;
}