Nuestra práctica consiste en la entrada de un parking controlada por un semáforo, este semáforo elige quien entra y quien sale.
La clase Principal.java es la que crea los objetos (coches) que entrarán y saldrán del parking. Estos objetos solamente tendrán el nombre para diferenciar cada hilo (coche).
public class Principal {
public static void main(String[] args) {
Coches uno = new Coches("Coche 1");
Coches dos = new Coches("Coche 2");
Coches tres = new Coches("Coche 3");
Coches cuatro = new Coches("Coche 4");
Coches cinco = new Coches("Coche 5");
Coches seis = new Coches("Coche 6");
Coches siete = new Coches("Coche 7");
Coches ocho = new Coches("Coche 8");
}
}
La clase Semaforo.java es la que se encarga de poner en espera a los coches para que entren o salgan, esta clase tiene dos métodos sincronizados. El primer método dice si el coche está entrando o saliendo, y un segundo método que marca el semáforo como ocupado.
public class Semaforo{
public synchronized void semaforo(Coches a){
if(a.getEntrada().equals("Sale")){
System.out.println("Un coche esta saliendo");
}
else if (a.getEntrada().equals("Entra")){
System.out.println("Un coche esta entrando");
}
}
public synchronized void espera(Coches a){
semaforo(a);
System.out.println("Esperando finalizacion de entrada o salida");
}
}
La clase Coches.java es la que especifica si el coche es de entrada o salida, y además mediante el método run la clase Semaforo.java pone en espera el hilo del coche.
public class Coches implements Runnable{
Thread t;
String entrada ;
Semaforo a;
Coches(String nombre){
t = new Thread(this, nombre);
int rand = (int) Math.round((Math.random()*1));
if (rand == 1){ //Entrada 1 Salida 0
entrada = "Entra";
}
else{
entrada = "Sale";
}
t.start();
}
public void run(){
a = new Semaforo();
a.espera(this);
}
public String getEntrada(){
return this.entrada;
}
}
Finalmente, este es el resultado:
Deja un comentario