modelo productor consumidor

Iniciado por Juanma91, 31 Enero 2014, 19:33 PM

0 Miembros y 1 Visitante están viendo este tema.

Juanma91

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:

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();

       }
   }


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);
       }
   }


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();