Originariamente inviato da maninblack
magari se hai un pezzettino di codice da postare mi faresti un gran favore, giusto per capire al 100%.
Ecco un esempio di classe per "depositare" un oggetto e gestire l'inserimento e estrazione in modo "bloccante".
codice:
public class DepositoOggetto {
private boolean disponibile;
private Object obj;
public synchronized void inserisci(Object obj) throws InterruptedException {
// Finché qualcun'altro non ha ancora preso l'oggetto, attendi
while (disponibile) {
wait();
}
this.obj = obj;
disponibile = true;
notifyAll();
}
public synchronized Object estrai() throws InterruptedException {
// Finché qualcun'altro non ha ancora inserito un oggetto, attendi
while (!disponibile) {
wait();
}
disponibile = false;
Object retObj = obj;
obj = null;
notifyAll();
return retObj;
}
}
Come si può vedere è concettualmente "simmetrico". inserisci() attende se l'oggetto non è ancora stato preso mentre estrai() attende se non c'è un oggetto disponibile.