Está en la página 1de 5

PROGRAMACION CONCURRENTE Y PARALELA

Programa: CAFE
EQUIPO 4

Codigo:

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

public class Cafe extends Applet implements ActionListener{


private Button hamburguesa;
private Button papasFritas;
private Button refrescoCola;
private Button cocinada;
private TextField nuevaOrden = new TextField("esperando orden", 30);
private TextArea colaMostrar = new TextArea("COLA DE PROCESOS:\n", 5, 20,
TextArea.SCROLLBARS_VERTICAL_ONLY);
private TextField cocinando = new TextField("no hay nada cocinandose", 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(cocinando);

cocinada = new Button("Lista");


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(cocinando, 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)
orden.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 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 Cola{

private TextArea mostrar;


private String[] cola = new String[10];
private int contador = 0;

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");
for(int c = 0; c < contador; c++)
mostrar.append(cola[c]+ "\n");

}
}

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(1000);
}
catch(InterruptedException e){
System.err.println("Exception");
}
mostrar.setText("esperando orden");
cola.introducir(nuevaOrden);
}
}
}
Corrida:

También podría gustarte