Modelo Productor – Consumidor
El modelo productor – consumidor
Comunicación entre hilos (punto 7.4 de la unidad 2: wait() y notify() )
Comunicación entre hilos con wait(), notify() y notifyAll()
Código:
public class Cola { private int numero; private boolean disponible = false;//inicialmente cola vacia public int get() { if(disponible) { //hay número en la cola disponible = false; //se pone cola vacía return numero; //se devuelve } return -1; //no hay número disponible, cola vacía } public void put(int valor) { 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(100); } 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); } } }
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.