You are on page 1of 8

CLASE CONTENEDOR

package productorconsumidor;

/**
* Esta clase representa el contenedor donde se producirán los elementos que consumen
los consumidores
* @author francis
*/
public class Contenedor
{
private int contenido;
private boolean contenedorlleno = Boolean.FALSE;

/**
* Obtiene de forma concurrente o síncrona el elemento que hay en el contenedor
* @return Contenido el contenedor
*/
public synchronized int get()
{
while (!contenedorlleno)
{
try
{
wait();
}
catch (InterruptedException e)
{
System.err.println("Contenedor: Error en get -> " + e.getMessage());
}
}
contenedorlleno = Boolean.FALSE;
notify();
return contenido;
}

/**
* Introduce de forma concurrente o síncrona un elemento en el contenedor
* @param value Elemento a introducir en el contenedor
*/
public synchronized void put(int value)
{
while (contenedorlleno)
{
try
{
wait();
}
catch (InterruptedException e)
{
System.err.println("Contenedor: Error en put -> " + e.getMessage());
}
}
contenido = value;
contenedorlleno = Boolean.TRUE;
notify();
}
}
CLASE CONSUMIDOR

package productorconsumidor;

/**
* Esta clase representa al consumidor
* @author francis
*/
public class Consumidor implements Runnable
{
private final Contenedor contenedor;
private final int idconsumidor;

/**
* Constructor de la clase
* @param contenedor Contenedor común a los consumidores y el productor
* @param idconsumidor Identificador del consumidor
*/
public Consumidor(Contenedor contenedor, int idconsumidor)
{
this.contenedor = contenedor;
this.idconsumidor = idconsumidor;
}

@Override
/**
* Implementación de la hebra
*/
public void run()
{
while(Boolean.TRUE)
{
System.out.println("El consumidor " + idconsumidor + " consume: " +
contenedor.get());
}
}
}
CLASE PRODUCTOR

package productorconsumidor;

import java.util.Random;

/**
* Clase que representa el productor
* @author francis
*/
public class Productor implements Runnable
{
private final Random aleatorio;
private final Contenedor contenedor;
private final int idproductor;
private final int TIEMPOESPERA = 1500;

/**
* Constructor de la clase
* @param contenedor Contenedor común a los consumidores y el productor
* @param idproductor Identificador del productor
*/
public Productor(Contenedor contenedor, int idproductor)
{
this.contenedor = contenedor;
this.idproductor = idproductor;
aleatorio = new Random();
}

@Override
/**
* Implementación de la hebra
*/
public void run()
{
while(Boolean.TRUE)
{
int poner = aleatorio.nextInt(300);
contenedor.put(poner);
System.out.println("El productor " + idproductor + " pone: " + poner);
try
{
Thread.sleep(TIEMPOESPERA);
}
catch (InterruptedException e)
{
System.err.println("Productor " + idproductor + ": Error en run -> " +
e.getMessage());
}
}
}
}
MAIN

package productorconsumidor;

/**
*
* @author francis
*/
public class ProductorConsumidor
{
private static Contenedor contenedor;
private static Thread productor;
private static Thread [] consumidores;
private static final int CANTIDADCONSUMIDORES = 5;

/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
contenedor = new Contenedor();
productor = new Thread(new Productor(contenedor, 1));
consumidores = new Thread[CANTIDADCONSUMIDORES];

for(int i = 0; i < CANTIDADCONSUMIDORES; i++)


{
consumidores[i] = new Thread(new Consumidor(contenedor, i));
consumidores[i].start();
}
productor.start();
}}