Ho un problema di sincronizzazione distribuito nello sviluppo di un gioco di carte. In pratica ho una classe principale di nome "Player" e un'altra di nome "StartServer" che avvia un server per ogni giocatore che partecipa (collegandosi via RMI). Come la classe StartServer accetta una connessione, crea un nuovo thread e gli passa l'established socket.

Per cominciare il gioco ho bisogno di ottenere una sorta di allineamento fra i vari giocatori, in modo tale che un giocatori non inizi prima degli altri.

Dovo essermi registrato via RMI, il Player ricevo una lista di giocatori già iscritti e li notifico mandando un messaggio. Fatto ciò il Player si mette in wait su un oggetto, in attesa che anche gli altri facciano lo stesso. Quindi come arriva una nuova connessione a StartServer, incremento un contatore che mi farà scattare la notify al raggiungimento di un numero di giocatori fissato.

Il problema è che questa soluzione è a rischio deadlock, ovvero è possibile che arrivino dei messaggi prima che il Player vada in wait.

Qualche idea?