/**
* Utilizzo dei semafori binari per l'allocazione
* delle risorse 
*/


public class FilosofoSemaforo extends Filosofo {

	protected Semaforo [] bastoncini;
	protected int				who;


	public FilosofoSemaforo(int who,Semaforo[] bastoncini){
		super(""+who);
		this.bastoncini=bastoncini;
		this.who=who;
	}// fine costruttorevuoto


	public void gestione_risorse(){
			System.out.println("Il filosofo "+nome+" Pensa");
			long attesa= (long)(Math.random()*10000);
			try{Thread.sleep(attesa);}catch(InterruptedException ie){}

			System.out.println("Il filosofo "+nome+" Vuole il bastoncino destro");
			bastoncini[(who+1)%5].P();
			System.out.println("Il filosofo "+nome+" Ottiene il bastoncino destro");

			System.out.println("Il filosofo "+nome+" Vuole il bastoncino sinistro");
			bastoncini[who].P();
			System.out.println("Il filosofo "+nome+" Ottiene il bastoncino sinistro");

			System.out.println("Il filosofo "+nome+" Mangia");
			attesa= (long)(Math.random()*10000);
			try{Thread.sleep(attesa);}catch(InterruptedException ie){}

			System.out.println("Il filosofo "+nome+" Rilascia il bastoncino destro");
			bastoncini[(who+1)%5].V();
			System.out.println("Il filosofo "+nome+" Rilascia il bastoncino sinistro");
			bastoncini[who].V();
	}// fine gestione risorse



}// fine classe

Listato 2
Implementazione con semaforo binario