Programacion Concurrente
  Estacionamiento
 

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();
 }
}

 
   
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis