File

Anuncio
PROGRAMACIÓN CONCURRENTE Y
PARALELA
Asesora: Carmen Cerón Garnica
Alumnos:
Oscar Eduardo González Ramos
Michael Castañeda Trejo
Jesús Uriel Rodríguez Cuautle
Iván Hernández Pedraza
Judith Angélica Herrera Nicio
Alan Job de la Luz Hernández
0
INTRODUCCIÓN
Ya hemos visto el trabajo de procesos que esperan un evento para empezar a
ocupar recursos. Un proceso produce el evento e que esperan los demás para poder
ejecutarse. Pero ahora veremos cómo se puede pasar información de un proceso a
otro. Algo que no es tan simple. Veamos la manera en ésta práctica en equipo.
1
DESARROLLO
CAFÉ LISTAS LIGADAS
Considere un sistema computacional para un café. Donde el programa se pase la
información actual de un proceso a otro.
Clase 1 | Café
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 listaMostrar = new TextArea("Lista de
proceso\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);
2
add(listaMostrar);
add(cocinando);
cocinada = new Button("Listo");
add(cocinada);
cocinada.addActionListener(this);
orden = new Orden();
ListaLigada listaL = new ListaLigada(listaMostrar);
completa = new Orden();
Mesero mesero = new Mesero(nuevaOrden, orden, listaL);
mesero.start();
Chef chef = new Chef(cocinando, completa, listaL);
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");
}
}
3
Clase 2 | Chef
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class Chef extends Thread
{
private TextField mostrar;
private Orden completa;
private ListaLigada listaL;
public Chef(TextField mostrar, Orden completa, ListaLigada listaL)
{
this.mostrar = mostrar;
this.completa = completa;
this.listaL = listaL;
}
public void run()
{
String orden="";
mostrar.setText("No hay nada cocinandose");
while(true)
{
//if(listaL.estaVacia()==true)
orden = listaL.eliminarInicio();
mostrar.setText(orden+" se está cocinando");
String cocinadaInfo = completa.esperarEvento();
mostrar.setText("no hay nada cocinandose");
}
}
}
Clase 3 | Mesero
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class Mesero extends Thread
4
{
private Orden orden;
private TextField mostrar;
private ListaLigada listaL;
public Mesero(TextField mostrar, Orden orden, ListaLigada listaL)
{
this.orden = orden;
this.mostrar = mostrar;
this.listaL = listaL;
}
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("Esperando orden");
listaL.insertarFinal(nuevaOrden);
}
}
}
Clase 4 | Orden
public class Orden
{
private String orden = "";
public synchronized void notificarEvento(String nuevaOrden)
{
5
orden= nuevaOrden;
notify();
}
public synchronized String esperarEvento()
{
while(orden.equals(""))
try
{
wait();
}
catch(InterruptedException e)
{
System.err.println("Excepción");
}
String nuevaOrden = orden;
orden = "";
return nuevaOrden;
}
}
Clase 5 | Lista Ligada
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class ListaLigada {
Nodo iniLista;
TextArea mostrar;
ListaLigada(TextArea mostrar)
{
this.mostrar = mostrar;
iniLista = null;
}
public synchronized void insertarFinal(String dato)
6
{
Nodo nuevo = new Nodo(dato);
Nodo aux = iniLista;
if(estaVacia())
iniLista = nuevo;
else
{
while(aux.siguiente != null)
{
aux=aux.siguiente;
}
aux.siguiente=nuevo;
}
mostrar();
notify();
}
public synchronized void insertarInicio(String dato)
{
Nodo aux = iniLista;
Nodo nuevo = new Nodo(dato);
if(estaVacia())
iniLista = nuevo;
else
{
nuevo.siguiente=iniLista;
iniLista = nuevo;
}
mostrar();
notify();
}
public synchronized String eliminarFinal()
{
Nodo adelante, atras;
adelante = atras = iniLista;
String borrado;
7
while(iniLista == null)
try
{
wait();
}
catch(InterruptedException e)
{
System.err.println("Excepción");
}
if(iniLista.siguiente == null)
{
borrado = iniLista.dato;
iniLista = null;
}
else
{
while(adelante.siguiente != null)
{
atras=adelante;
adelante = adelante.siguiente;
}
borrado = adelante.dato;
atras.siguiente=null;
}
mostrar();
return borrado;
}
public synchronized String eliminarInicio()
{
while(iniLista == null)
try
{
wait();
}
catch(InterruptedException e)
8
{
System.err.println("Excepción");
}
String borrado = iniLista.dato;
iniLista = iniLista.siguiente;
mostrar();
return borrado;
}
void mostrar()
{
mostrar.setText("Lista de procesos: \n");
Nodo aux = iniLista;
while(aux != null)
{
mostrar.append(aux.dato+"\n");
aux=aux.siguiente;
}
}
boolean estaVacia()
{
return iniLista == null;
}
}
Clase 6 | Nodo String
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class Nodo {
String dato;
Nodo siguiente;
9
Nodo(String dato)
{
this.dato = dato;
siguiente = null;
}
}
Applet de programa Café con Listas Ligadas
10
Programa 2 | Poetas
Este ejercicio consiste en agregar a un poeta más del programa de poetas en las
páginas de las copias dejadas por la profesora.
Revolucionario.java
Poeta que tratara de imprimir su poema en la pantalla
11
Infantil.java
Para que los poetas puedan imprimir sus poemas primero deben de pedir un
permiso al controlador de pantalla
12
NuevoPoeta.java
13
ControladorDePantalla.java
El controlador de Pantalla funciona como intermediario para que cada poeta pueda
imprimir sus poemas en turnos
14
Poetas.java
Programa ejecutado y compilado
15
CONCLUSIÓN
La creación de APPLET´s por medio de hilos es una forma mejorada de trabajar con
programas. Un detalle interesante es el paso de información entre hilos de
ejecución.
16
BIBLIOGRAFÍA
http://thales.cica.es/rd/Recursos/rd99/ed99-0444-03/creaHilos.html
17
Descargar