Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Juanma91 en 31 Enero 2014, 19:33 pm



Título: modelo productor consumidor
Publicado por: Juanma91 en 31 Enero 2014, 19:33 pm
No consigo entender porque siempre esta esperando mi programa. quiero conseguir el efecto "ping-pong" con el modelo productor consumidor pero se queda siempre en wait(); a que se debe?

facilito micodigo:

Código:
public class Cola {

    private String numero;
    private boolean disponible=false;

    public synchronized String get() {
       while (disponible == false) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
        }
        disponible = false; //lo va a consumir
        notifyAll();

        return numero;
    }

    public synchronized void put(String valor) {
        while (disponible == true) {
            try {
                wait();
            } catch (InterruptedException e) {
            }
            numero = valor;
            disponible = true; //lo va a consumir
            notifyAll();

        }
    }

Código:
public class Consumidor extends Thread{
    private Cola cola;
    private String n;

    public Consumidor(Cola cola) {
        this.cola = cola;
    }
    
    @Override
    public void run(){
        while(true){
            n = cola.get();
            System.out.println(n);
        }
    }

Código:
public class Productor extends Thread {

    private Cola cola;
    private String texto;
    private String texto2;
    private String actual;

    public Productor(Cola cola, String texto, String texto2) {
        this.cola = cola;
        this.texto = texto;
        this.texto2 = texto2;
        this.actual = texto2;
    }

    @Override
    public void run() {
        while (true) {
                if (!actual.equals(texto2)) {

                    cola.put(texto2);
                    actual = texto2;
                } else {

                    cola.put(texto);
                    actual = texto;
                }

        }
    }

main(){
Cola cola= new Cola();
Productor p= new Productor(cola,"ping","pong);
Consumidor c= new  Consumidor(cola);
p.start();
c.start();