Java RMI: supporto alla concorrenza
-
28-10-2019 - |
Domanda
Sto sviluppando un gioco di carte multiplayer con un'architettura P2P, non è una mia decisione, il progetto è stato commissionato dal professore di corso di sistema distribuito presso la mia università.
Un altro vincolo imposto dal professore è quello di utilizzare la tecnologia Java RMI per implementare il livello di comunicazione tra i giocatori.
Saprei se Java RMI gestisce la concorrenza "fuori dalla scatola", in altre parole saprei se quando invocherò un metodo su un oggetto remoto, l'oggetto viene automaticamente "bloccato" e nessun oggetto può invocare contemporaneamente lo stesso metodo.
Potrebbe dichiarare i metodi come sincronizzati essere una buona soluzione?
Grazie
Soluzione
Chiamare un metodo su un oggetto remoto non blocca l'oggetto.
Dichiarare un metodo da sincronizzare è un modo per controllare l'accesso. Tuttavia, semplicemente dichiarare tutti i tuoi metodi su tutti gli oggetti accessibili a distanza da sincronizzare è una cattiva idea. In effetti, a seconda dei dettagli di ciò che stai facendo, potrebbe creare colli di bottiglia in concorrenza inutili e/o rischio di rischio di Deadlocks. Devi pensare più attentamente al comportamento degli oggetti e delle interazioni.
Altri suggerimenti
Sincronizzare il metodo è un buon inizio. C'è una penalità di performance per farlo, ma nel tuo caso questo è perfettamente bene.
Guarda questo Java RMI e metodi sincronizzati