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