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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top