我有一个存储在'服务器'上的类,多个客户端可以调用此方法。这个方法返回一个类。现在,当客户端调用此类中的访问器方法时,例如设置访问器方法。我希望服务器上的对象能够在所有其他客户端上进行更新和同步。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