Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2010, 04:51
moisesvs
 
Fecha de Ingreso: junio-2009
Mensajes: 65
Antigüedad: 15 años, 6 meses
Puntos: 0
Productor/Consumidor en Java

Hola a todos!

He intentado generar el código para hacer el programa de productor/consumidor, pero no se por que no entiendo muy los synchronized en Java y no me funciona correctamente, el código que he generado es el siguiente haber si me podeís decir algo de como solucionar para que no se bloqueen o alguna idea. Muchas gracias!


Código:
import java.util.*;

public class Intercambio extends Thread{
        //0 Consumidor
        //1 Productor
        private int tipo;
        private static LinkedList <Proceso> permisosponer = new LinkedList();
        private static LinkedList <Proceso>permisosquitar = new LinkedList();
       
        public Intercambio(int ptipo)
        {
            this.tipo=ptipo;
        }
       
        public void run ()
        {
            if(this.tipo==0)
                for(;;)
                    get();
            else
                for(;;)
                    put();
        }
       
        public void get()
        {
            try{
                Proceso p = new Proceso();
                synchronized (p)
                {
                    synchronized (permisosponer)
                    {
                      if (permisosponer.size()==0)
                      {
                               System.out.println("CONSUMIDOR ME DUERMO...");
                             permisosponer.wait();
                      }
                          permisosquitar.add(p);
                          System.out.println("CONSUMIDOR ME CONSUMIENDO!!");
                          permisosquitar.notify();
                    }
                }
            }catch (InterruptedException e)
            {
                System.out.println("PROBLEMA AL PARAR EL HILO");
            }
        }
        public void put()
        {
            try{
                Proceso p = new Proceso();
                synchronized (p)
                {
                    synchronized (permisosquitar)
                    {
                      if (permisosquitar.size()==0)
                      {
                              System.out.println("\t\tPRODUCTOR ME DUERMO...");
                             permisosquitar.wait();
                      }
                      permisosponer.add(p);
                      System.out.println("\t\tPRODUCTOR ESCRIENDO!");
                      permisosponer.notify();
                    }
                }
            }catch (InterruptedException e)
            {
                System.out.println("PROBLEMA AL PARAR EL HILO");
            }
        }
}