Ciao ragazzi, questo è il mio problema:

Devo gestire un parcheggio composto da 2 posti auto, solo quando un’auto esce, ne può entrare un’altra.

Il mio problema è che i thread precedendemente addormentati con il metodo wait(), non si risvegliano più..

Cosa sto sbagliando


Grazie mille.


public class Sincronizzazione implements Runnable {
static int autoParcheggiate = 0;
static final int POSTI_LIBERI = 2;

static int tMin = 3000;
static int tMax = 6000;

//Identificato auto
int idAuto;

public Sincronizzazione(int idAuto){
System.out.println("Sono vivo auto: "+idAuto);
this.idAuto = idAuto;
}

public synchronized void entra(){
//Considera anche lo 0, quindi >=
while (autoParcheggiate>=POSTI_LIBERI)
{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
autoParcheggiate++;
}

public synchronized void esci(){

autoParcheggiate--;
System.out.println("Sono uscito auto: "+idAuto);
notify();


}


@Override
public void run() {

entra();


int tRandom = (int) Math.floor(Math.random() * tMax) + tMin;
System.out.println("Sono entrato auto: "+idAuto+" per tempo: "+tRandom+" - autoParcheggiate: "+autoParcheggiate);
try {
Thread.sleep(tRandom);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}

esci();



}

}