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:
Problema del Productor Consumidor usando Monitores
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.