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:

LinkedList

Problema: productores y consumidores

Código de productores y consumidores

¿Cómo sincronizar la terminación de todos?

 

Deja una respuesta