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