package Semaforo;
public class Coche extends Comun implements Runnable {
int i;
public Coche (int _i) {
i = _i;
}
public void run() {
try {
Thread.sleep (1000);
} catch (Exception e) {}
System.out.println ("Llega el coche "+ i);
noHayCoche.WAIT();
boton.SIGNAL();
barreraAbierta.WAIT();
System.out.println ("Coche "+i+" pasando.");
cocheHaPasado.SIGNAL();
noHayCoche.SIGNAL();
try {
Thread.sleep (1000);
} catch (Exception e) {}
numCoches.SIGNAL();
System.out.println ("Coche "+i+" saliendo.");
}
}
package Semaforo;
public class Barrera extends Comun implements Runnable {
public void run() {
while (true) {
numCoches.WAIT();
ticketExpendido.WAIT();
barreraAbierta.SIGNAL();
System.out.println ("Levantando Barrera.");
cocheHaPasado.WAIT();
System.out.println ("Bajando Barrera.");
barreraBajada.SIGNAL();
}
}
}
package Semaforo;
public class Coche extends Comun implements Runnable {
int i;
public Coche (int _i) {
i = _i;
}
public void run() {
try {
Thread.sleep (1000);
} catch (Exception e) {}
System.out.println ("Llega el coche "+ i);
noHayCoche.WAIT();
boton.SIGNAL();
barreraAbierta.WAIT();
System.out.println ("Coche "+i+" pasando.");
cocheHaPasado.SIGNAL();
noHayCoche.SIGNAL();
try {
Thread.sleep (1000);
} catch (Exception e) {}
numCoches.SIGNAL();
System.out.println ("Coche "+i+" saliendo.");
}
}
package Semaforo;
public class Comun {
protected static SemaforoBinario boton = new SemaforoBinario(0);
protected static SemaforoBinario ticketExpendido = new SemaforoBinario(0);
protected static SemaforoBinario barreraAbierta = new SemaforoBinario(0);
protected static SemaforoBinario cocheHaPasado = new SemaforoBinario(0);
protected static SemaforoBinario noHayCoche = new SemaforoBinario(1);
protected static SemaforoBinario barreraBajada = new SemaforoBinario(1);
protected static SemaforoGeneral numCoches = new SemaforoGeneral(5);
}
package Semaforo;
public class SemParking {
public static void main (String args[]) {
for (int i=0; i<5; i++)
new Thread (new Coche (i)).start();
new Thread (new Maquina()).start();
new Thread (new Barrera()).start();
}
}
Ejecucion del programa:

|