2011-06-15 95 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。您需要更仔細地考慮對象的行爲和交互。