Occorre inoltre definire una classe Occupa-Sedia con attributi per rappresentare il numero di partecipanti, il numero di sedie disponibili ed il numero di sessioni previste per una determinata istanza del gioco. Occorre definire una struttura dati per modellare la sequenza di K sedie disponibili ed una per modellare gli N partecipanti al gioco.
Quindi (La classe che manca nel tuo codice)
codice:
public class OccupaSedia {
   private int numPartecipanti;
   private int numSedie;
   private int numSessioni;

   private Partecipante[] partecipanti;
   private Sedie[] sedie; //Io sinceramente non userei un array, comunque fai tu.

   public OccupaSedia(int numPartecipanti, int numSedie, int numSessioni){
      /* Setti le variabili
       * crei gli array e li popoli di elementi
       * puoi anche far partire i thread già che ci sei
       */
   }
   
   public void avviaSessione() {
       partecipanti.notifyAll();
   }
   
   public synchronized boolean occupaSedia() {
      Sedia sedia = null;
      for(int i=0; i<numSedie; i++) {
         sedia = sedie[i];
         //Se la sedia non e' occupata, la occupo ed esco dal for
         if(!sedia.getStatoSedia) {
            sedia.occupa();
            return true;
          }
      }
      //Se tutte le sedie sono gia' occupate, ho perso.
      return false;
   }

   public void terminaSessione() {
      // Stampi le tue statistiche poi azzeri con il codice sotto
      for(int i=0; i<numSedie; i++) {
          sedie[i].reset();
      }
   }
}