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