2011-06-15 96 views
0

我正在开发一个带有P2P架构的多人纸牌游戏,这不是我的决定,该项目已经由我的大学的分布式系统课程授课。Java RMI:并发支持

教授强加的另一个约束是使用Java RMI技术来实现玩家之间的通信层。

我知道如果Java RMI管理并发性“开箱即用”,换句话说,我会知道如果在远程对象上调用方法时,对象会自动“锁定”并且没有对象可以同时调用同样的方法。

能否将方法声明为synchronized是一个很好的解决方案?

谢谢

+0

取决于RMI提供程序......但默认是多线程的,因此可以同时调用相同的方法。话虽如此,我认为在一个方法上盲目地同步是愚蠢的 - 它是* objects *和*这种*的用法,需要被保护。 – 2011-06-15 09:28:58

+0

我声称没有单线程的RMI提供程序。 RMI规范基本上说,你不能认为它是单线程的,所以你必须自己照顾同步。我还断言实际上没有RMI提供者这样的事情,RMI没有SPI架构:只有整个JDK的实现。 – EJP 2011-06-18 10:10:16

回答

2

调用远程对象的方法不锁定的对象。

声明要同步的方法是控制访问的一种方法。但是,简单地声明所有远程可访问对象上的所有方法都是同步的,这是一个坏主意。事实上,根据你在做什么的细节,它可能会产生不必要的并发瓶颈和/或风险deadlocks。您需要更仔细地考虑对象的行为和交互。