//************************************************************************/ // definizione di una classe che rappresenta un processo: deve ereditare / // dalla classe di libreria Thread / //************************************************************************/ public class Persona extends Thread { // variabile che rappresenta il monitor private Sagra s; int tipo; String nome; // costruttore della classe public Persona(Sagra s, int tipo, String nome) { // inizializzazione della variabile monitor this.s = s; this.tipo = tipo; this.nome = nome + ":mangio " + tipo; } public void run() { String piatto = ""; if (tipo == 1) piatto = "primo"; if (tipo == 2) piatto = "secondo"; if(tipo == 1 || tipo == 2) { s.Ordina(tipo, nome, piatto); //Sleep in cui viene preparato il piatto try{Thread.sleep((long) (Math.random()*3000+1));} catch(InterruptedException e){} s.Ritira(tipo, nome, piatto); } if(tipo == 3) { s.Ordina(tipo, nome, "primo"); //Sleep in cui viene preparato i piatto try{Thread.sleep((long) (Math.random()*3000+1));} catch(InterruptedException e){} s.Ritira(tipo, nome, "primo"); //Sleep per simulare il momento in cui si mangia il primo, prima di ordinare il secondo try{Thread.sleep((long) (Math.random()*1000+1));} catch(InterruptedException e){} s.Ordina(tipo, nome, "secondo"); //Sleep in cui viene preparato i piatto try{Thread.sleep((long) (Math.random()*3000+1));} catch(InterruptedException e){} s.Ritira(tipo, nome, "secondo"); } } }