Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javarmi方法同步_Java_Synchronization_Rmi - Fatal编程技术网

javarmi方法同步

javarmi方法同步,java,synchronization,rmi,Java,Synchronization,Rmi,我有一个存储在“服务器”上的类,多个客户端可以调用此方法。此方法返回一个类。现在,当客户端调用此类中的访问器方法时,例如set访问器方法。我希望服务器上的对象在所有其他客户端之间更新和同步 如何使用: public synchronized setStatus(String s) { this.status = s; } 在java中实现这一点 感谢synchronized关键字不执行此功能,相反,synchronized关键字尝试获取当前对象的内部锁 让您的所有客户端将自己导出为远程对象,并

我有一个存储在“服务器”上的类,多个客户端可以调用此方法。此方法返回一个类。现在,当客户端调用此类中的访问器方法时,例如set访问器方法。我希望服务器上的对象在所有其他客户端之间更新和同步

如何使用:

public synchronized setStatus(String s) { this.status = s; }
在java中实现这一点


感谢synchronized关键字不执行此功能,相反,
synchronized
关键字尝试获取当前对象的内部锁

让您的所有客户端将自己导出为
远程
对象,并向服务器注册更新。当您的一个客户端更新服务器时,服务器将调用所有注册的
远程
客户端,要求它们刷新


这可以通过
Observer
模式实现。如果您的所有客户机都实现了
java.util.Observer
接口,并且服务器或(如果您的类是
远程
)您所关心的类可以扩展
java.util.Observable
。当类/服务器更新时,可以用新值通知观察者,这将节省客户端向服务器请求新值时的一些网络延迟。

我正在尝试理解这个问题。我有两个想法:

  • 您正在调用一个
    getObject()
    远程调用,然后希望更新返回的对象并使其在所有客户端之间同步。这行不通。将对象传递给客户机后,更新仅在该客户机本地进行

  • 您询问是否可以同步远程呼叫,并在更新后使该值对所有客户端可用。这里的答案是肯定的。假设您的所有客户机都在访问该值,不是本地访问,而是通过远程调用访问:

      public String getStatus() throws RemoteException;
    

  • 如果是这种情况,那么您的客户机调用,无论是否调用了
    set
    方法,都将收到新值

    这个方法返回一个类。“你的意思是它返回一个*对象吗?”这个对象是远程对象,还是只是一个可序列化的对象?我没有说任何关于竞争条件的事情。