Programacion Concurrente
  Cafe
 

import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

public class Cafe extends Applet implements ActionListener
{
 private Button hamburguesa, papasFritas, refrescoCola, cocinada;
 private TextField nuevaOrden = new TextField("esperando orden", 30);
 private TextArea colaMostrar = new TextArea("cola procesos\n", 5, 20, TextArea.SCROLLBARS_VERTICAL_ONLY);
 private TextField cocinado = new TextField("No hay nada cocinandoce", 30);
 private Orden orden, completa;
 
 public void init(){
  hamburguesa = new Button("Hamburguesa");
  add(hamburguesa);
  hamburguesa.addActionListener(this);
  papasFritas = new Button("Papas");
  add(papasFritas);
  papasFritas.addActionListener(this);
  refrescoCola = new Button("Soda");
  add(refrescoCola);
  refrescoCola.addActionListener(this);
  
  add(nuevaOrden);
  add(colaMostrar);
  add(cocinado);
  
  cocinada = new Button("listo");
  add(cocinada);
  cocinada.addActionListener(this);
  
  orden = new Orden();
  Cola cola = new Cola(colaMostrar);
  completa = new Orden();
  
  Mesero mesero = new Mesero(nuevaOrden, orden, cola);
  mesero.start();
  
  Chef chef = new Chef(cocinado, completa, cola);
  chef.start();
  }
   
  public void actionPerformed(ActionEvent event){
   if (event.getSource() == hamburguesa)
    orden.notificarEvento("hamburguesa");
   if(event.getSource() == papasFritas)
    orden.notificarEvento("papasFritas");
   if (event.getSource() == refrescoCola)
    orden.notificarEvento("refrescoCola");
   if (event.getSource() == cocinada)
    completa.notificarEvento("listo");
      
  }
 
 public class Orden{
  
  private String orden = "";
  
  public synchronized void notificarEvento(String nuevaOrden){
   orden = nuevaOrden;
   notify();
  }
  
  public synchronized String esperarEvento(){
   while(orden.equals(""))
   try{
    wait();
   }
   catch(InterruptedException e){
    System.err.println("Exception");
   }
  
   String nuevaOrden = orden;
   orden = "";
   return nuevaOrden;
  }
  
 } 
  
  
 class Cola{
  private TextArea mostrar;
  private String[] cola = new String[5];
  private int contador;
  
  public Cola(TextArea mostrar){
   this.mostrar = mostrar;
  }
   
   public synchronized void introducir(String elemento){
    cola[contador] = elemento;
    contador++;
    mostrar();
    notify();
    
   }
 
  public synchronized String quitar(){
   while(contador == 0)
   try{
    wait();
   }
   catch(InterruptedException e){
    System.err.println("Exception");
   }
   String elemento = cola[0];
   contador--;
   for (int c = 0; c<contador; c++)
   cola[c] = cola[c+1];
   mostrar();
   return elemento;
  }
  
  public void mostrar(){
   mostrar.setText("COLA DE PROCESOS\n");
  }
 
 }
 
 class Chef extends Thread{
  
  private TextField mostrar;
  private Orden completa;
  private Cola cola;
  
  public Chef(TextField mostrar, Orden completa, Cola cola){
   this.mostrar = mostrar;
   this.completa = completa;
   this.cola = cola;
  }
  
  public void run(){
   mostrar.setText("No hay nada cocinandose");
   while(true){
    String orden = cola.quitar();
    mostrar.setText(orden + "se esta cocinando");
    String cocinadaInfo = completa.esperarEvento();
    mostrar.setText("No hay nada cocinandose");
    
   }
  }
 }  
 

 class Mesero extends Thread{
 
 private Orden orden;
 private TextField mostrar;
 private Cola cola;
 
 public Mesero (TextField mostrar, Orden orden, Cola cola){
  this.orden = orden;
  this.mostrar = mostrar;
  this.cola = cola;}
 

 public void run(){
  while(true){
  String nuevaOrden = orden.esperarEvento();
  mostrar.setText("nueva orden:" + nuevaOrden);
  try{
  Thread.sleep(5000);
  }
  catch (InterruptedException e){
  System.err.println("Excepcion");
  }
 
  mostrar.setText("separando orden");
  cola.introducir(nuevaOrden);
 }
}


}
}

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