Ciao a tutti,
ho un problema con un gestore di risorse: il gestore deve discriminare la prenotazione delle stanze da parte di un certo numero di thread client.
Il mio problema è che le richieste dei vari client vengono soddisfatte praticamente in serie, bloccando l'esecuzione fino al rilascio della stanza prenotata da ciascun client.
In questo modo non ottengo mai segnalazione di "BUSY" (stanze tutte occupate) e non viene mai occupata più di una stanza per volta.

Il codice del gestore (semplificato all'osso) è questo:

codice:
public class Gestore {
   
   private static int numStanze=2;
   private int occupate=0;

   public String check_availability(String client) {
      String res;
      if ((numStanze-occupate)==0){
         res="BUSY";
         System.out.println(res);
      }
      else {
         occupate++;
         res="ASSIGN "+occupate;
         System.out.println("Restano "+(numStanze-occupate)+" stanze libere");
      }
      return res;
   }
   
   synchronized public String en_queue(String client) {
      while((numStanze-occupate)==0){
         try {
            wait();
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
      occupate++;
      return "ASSIGN "+occupate;
   }

   synchronized public void release(String client) {   
      occupate--;
      notifyAll();
   }

}
Qualcuno sa dirmi cosa sbaglio? Grazie