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