import java.io.*;
class maquina extends MyObject{
private boolean boton,lleno;
private ConditionVariable oprime = null;
private ConditionVariable restaura = null;
private ConditionVariable meter = null;
private ConditionVariable sacar = null;
private int tam,cont;
public maquina (int x){
boton=false;
lleno=false;
tam = x;
cont = 0;
oprime = new ConditionVariable();
restaura = new ConditionVariable();
meter = new ConditionVariable();
sacar = new ConditionVariable();
}
public synchronized void oprimir(){
while(boton) wait(oprime);
System.out.println("Se oprimio el boton de la maquina");
notify(restaura);
boton=true;
}
public synchronized void Restaura(){
while(!boton) wait(restaura);
System.out.println("Se restauro el boton de la maquina");
notify(oprime);
boton=false;
}
public synchronized boolean getestado(){return boton;}
public synchronized void meter_carro(){
while (lleno) wait(meter);
cont++;
if (cont==tam){
lleno=true;
System.out.println ("El estacionamiento esta lleno! Espere...n");
}
notify(sacar);
}
public synchronized void sacar_carro(){
while (cont==0) wait(sacar);
cont--;
if (cont!=tam) lleno=false;
notify(meter);
}
} //fin de la clase máquina
class carro_llega extends Thread{
private maquina m;
public carro_llega(maquina x){
this.m=x;
}
public void run(){
for (int i=1; i<=5;i++){
m.oprimir();
System.out.println("Tome su ticket");
System.out.println("Se levanta la barra(Entrada)nEl semaforo esta en verde, puede pasar");
m.Restaura();
System.out.println ("tEl auto esta entrando!");
m.meter_carro();
try {sleep((int)(Math.random()*2000));}
catch(InterruptedException e){}
System.out.println("Se baja la barra(Entrada)n");
}
}
}//clase
class carro_sale extends Thread{
private maquina m;
public carro_sale (maquina x){
this.m=x;
}
public void run(){
for (int i=1; i<=5;i++){
System.out.println("Se levanta la barra(Salida)nEl semaforo esta en verde, puede salir");
System.out.println ("tEl auto esta saliendo!");
m.sacar_carro();
try {sleep((int)(Math.random()*10000));}
catch(InterruptedException e){}
System.out.println("Se baja la barra(Salida)n");
}
}
}
class parking {
public static void main(String args[]) {
maquina m = new maquina(10);
carro_llega c1 = new carro_llega(m);
carro_sale c2 = new carro_sale(m);
c1.start();
c2.start();
}
}
|