Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La empresa de correo postal “Fast Mail” se dedica a la entrega de cartas a domicilio. Necesita simular los
procesos de negocios que en la misma se llevan a cabo y que se describen de la siguiente manera.
El cliente llega a intervalos aleatorios de entre 7 y 10 segundos, deja la carta en recepción, la cual es
depositada en un buzón. El buzón tiene capacidad para almacenar hasta 5 cartas simultáneamente. El
cartero retira una carta por vez del buzón, tardando entre 9 y 15 segundos en entregarla. Antes de
entregarla le coloca el sello de entregado a la misma, y luego informa que dicha carta se entregó
(exhibiendo el mensaje en un JTextArea).
Implementar la situación antes planteada en un JFrame, el cual deberá contener 1 JTextArea (para
exhibir los mensajes de los clientes y del cartero), y un botón “Iniciar” que al presionarlo inicialice la
ejecución de los hilos, y otro botón “Salir” que permita salir de la aplicación. Simular 10 entregas,
teniendo en cuenta que cada cliente solo podrá depositar una carta y que solo existe un cartero para la
repartición.
Resolución
Clase Carta
package pprprimerejconcurrencia;
/**
*@author Ing. Nicolás Colacioppo
*/
public class Carta
{
private static int nro=0;
private int codigo;
private String direccion;
private boolean entregado;
private static String dir[]={"Lombardo 111","Mexico 222","Pier 333"};
public Carta()
{
nro++; codigo=nro;
int i=(int)(Math.random()*3);
direccion=new String(dir[i]);
entregado=false;
}
public void entregar() {entregado=true;}
public boolean estadoCarta() {return entregado; }
public int getCodigo(){return codigo;}
Clase Recepcion
package pprprimerejconcurrencia;
import java.util.ArrayList;
import java.util.Iterator;
/**
*@author Ing. Nicolás Colacioppo
*/
public class Recepcion
1 de 6
Universidad Tecnológica Nacional – FC Carrera: Ingeniería en Sistemas de Información
Cátedra: Paradigmas de Programación Ejercicio 1 Productor/Consumidor
Autor: Ing. Nicolás Colacioppo Curso:2K1/Año:2008
public Recepcion()
{
buzon=new ArrayList(5);
lleno=false;
vacio=true;
cantidad=0;
}
buzon.add(c);
cantidad++;
vacio=false;
lleno=estaLleno();
this.notifyAll();
}
Iterator iter=buzon.iterator();
Carta c=null;
vacio=estaVacio();
lleno=false;
this.notifyAll();
return (Carta)aux;
}
2 de 6
Universidad Tecnológica Nacional – FC Carrera: Ingeniería en Sistemas de Información
Cátedra: Paradigmas de Programación Ejercicio 1 Productor/Consumidor
Autor: Ing. Nicolás Colacioppo Curso:2K1/Año:2008
if(buzon.isEmpty())
return true;
else
return false;
}
Clase Cliente
package pprprimerejconcurrencia;
import java.awt.*;
import javax.swing.*;
/**
*@author Ing. Nicolás Colacioppo
*/
public class Cliente extends Thread
{
private Recepcion rec;
private JTextArea mensaje;
}//fin Cliente
Clase Cartero
package pprprimerejconcurrencia;
import java.awt.*;
import javax.swing.*;
/**
*@author Ing. Nicolás Colacioppo
*/
public class Cartero extends Thread
{
private Recepcion rec;
private JTextArea mensaje;
3 de 6
Universidad Tecnológica Nacional – FC Carrera: Ingeniería en Sistemas de Información
Cátedra: Paradigmas de Programación Ejercicio 1 Productor/Consumidor
Autor: Ing. Nicolás Colacioppo Curso:2K1/Año:2008
this.rec=rec; this.mensaje=mensaje;
}
}//fin Cartero
Clase Aplicacion
package pprprimerejconcurrencia;
import java.util.ArrayList;
import java.util.Iterator;
/**
*
* @author Nicolás
*/
public class Aplicacion extends javax.swing.JFrame {
initComponents();
recepcion=new Recepcion();
cartero=null;
clientes=new ArrayList(10);
4 de 6
Universidad Tecnológica Nacional – FC Carrera: Ingeniería en Sistemas de Información
Cátedra: Paradigmas de Programación Ejercicio 1 Productor/Consumidor
Autor: Ing. Nicolás Colacioppo Curso:2K1/Año:2008
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jButton1.setText("Iniciar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Salir");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
pack();
}// </editor-fold>
cartero.start();
Iterator iter=clientes.iterator();
5 de 6
Universidad Tecnológica Nacional – FC Carrera: Ingeniería en Sistemas de Información
Cátedra: Paradigmas de Programación Ejercicio 1 Productor/Consumidor
Autor: Ing. Nicolás Colacioppo Curso:2K1/Año:2008
Cliente c=null;
while(iter.hasNext())
{
c=(Cliente)iter.next();
c.start();
}
jButton1.setEnabled(false);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Aplicacion().setVisible(true);
}
});
}
6 de 6