Modelo Productor – Consumidor
El modelo productor – consumidor
Comunicación entre hilos (punto 6.3.4)
Ejercicio: Comunicación entre hilos del productor y consumidor usando wait(), notify() y notifyAll()
Código:
public class Cola { private int numero; private boolean disponible = false;//inicialmente cola vacia public int get() { private int valor = -1; if (disponible) { //hay número en la cola disponible = false; //se pone cola vacía valor = numero; //se devuelve e número de la cola } return valor; //si no hay número disponible, se devuelve -1 } public void put(int valor) { if (!disponible) { //no hay número en la cola numero = valor; //coloca valor en la cola disponible = true; //disponible para consumir, cola llena } } }
public class Productor extends Thread { private Cola cola; private int n; public Productor(Cola c, int n) { cola = c; this.n = n; } public void run() { for (int i = 0; i < 5; i++) { cola.put(i); //pone el número System.out.println(i + "=>Productor : " + n + ", produce: " + i); try { sleep(1000); } catch (InterruptedException e) { } } } }
public class Consumidor extends Thread { private Cola cola; private int n; public Consumidor(Cola c, int n) { cola = c; this.n = n; } public void run() { int valor = 0; for (int i = 0; i < 5; i++) { valor = cola.get(); //recoge el número System.out.println(i + "=>Consumidor: " + n + ", consume: " + valor); try { sleep(2000); } catch (InterruptedException e) { } } } }
public class Produc_Consum { public static void main(String[] args) { Cola cola = new Cola(); Productor p = new Productor(cola, 1); Consumidor c = new Consumidor(cola, 1); p.start(); c.start(); } }
Modificar el productor y el consumidor para sincronizarse ( usando wait() y notify() )
Código del ejercicio Productor_Consumidor
¿Qué ocurre si hay varios productores y consumidores? ¿Cómo sincronizar la terminación de todos?
Otro ejemplo similar:
Monitores: ejemplo de productor-consumidor
Más información:
Problema: productores y consumidores
Código de productores y consumidores
¿Cómo sincronizar la terminación de todos?
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.