我有一個存儲在'服務器'上的類,多個客戶端可以調用此方法。這個方法返回一個類。現在,當客戶端調用此類中的訪問器方法時,例如設置訪問器方法。我希望服務器上的對象能夠在所有其他客戶端上進行更新和同步。Java RMI方法同步
如何使用:
public synchronized setStatus(String s) { this.status = s; }
的Java內實現這一目標。
由於
我有一個存儲在'服務器'上的類,多個客戶端可以調用此方法。這個方法返回一個類。現在,當客戶端調用此類中的訪問器方法時,例如設置訪問器方法。我希望服務器上的對象能夠在所有其他客戶端上進行更新和同步。Java RMI方法同步
如何使用:
public synchronized setStatus(String s) { this.status = s; }
的Java內實現這一目標。
由於
的關鍵字不執行該功能,而是,關鍵字嘗試獲取當前對象的固有鎖。
讓所有客戶端自己導出爲Remote
對象,並註冊服務器更新。當你的一個客戶更新服務器時,服務器將調用所有註冊的Remote
客戶,要求他們刷新。
這可以通過Observer
模式來實現。如果您的所有客戶實施java.util.Observer
界面,或者服務器或(如果您的班級是Remote
),則您關心的更新類可以延伸java.util.Observable
。當類/服務器更新時,可以用新值通知觀察者,這將節省客戶端的一些網絡延遲,以便向服務器詢問新值。
我想了解這個問題。我心裏有兩個想法:
要調用getObject()
遠程調用,然後要更新返回對象,並讓它在所有客戶端同步。這不會工作。一旦對象傳遞給客戶端,更新僅在該客戶端本地。
您在詢問是否可以同步遠程呼叫,並且該值一旦更新後便可供所有客戶端使用。這裏的答案是是。的假設是,所有的客戶端訪問的價值,不在本地,而是通過遠程調用:
public String getStatus() throws RemoteException;
如果是這樣的話,那麼你的客戶端調用,不管他們是否叫set
方法,都會收到新的值。
「此方法返回一個類。」你的意思是它返回一個*對象「,並且該對象是一個遠程對象,或者只是一個Serializable對象? – EJP 2010-04-10 06:48:48