![](/img/trans.png)
[英]“java.rmi.ConnectException: Connection refused to host” when exporting an object client-side
[英]Java RMI threads on client-side are executing sequentially or concurrently when calling the same remote object?
我在理解Java RMI的特定方面时遇到麻烦。
有一个客户端创建了N个线程,这些线程在RMIregistry上进行查找:
Registry rmiRegistry;
try {
rmiRegistry = LocateRegistry.getRegistry(8585);
IGestoreSportello igs = (IGestoreSportello)rmiRegistry.lookup("gestoresportelli");
ExecutorService s = Executors.newCachedThreadPool();
for(int i = 0; i < T; i++){
s.execute(new threadRunner(igs));
}
先前在服务器中将“ gestoresportelli”注册为服务的位置。
因此,据我所知,客户端对SAME对象的引用都相同。
我要问的是,当我在此对象上调用方法时,是CLIENT执行服务器代码吗?
还是服务器依次调用该对象上的方法?
因此,假设我们有:
线程1,线程2,线程3。 它们都在服务器上注册的同一远程对象上调用相同的方法。
他们是否按顺序调用它:
Thread1->RemoteObjectReference.doSomething();
wait thread 1 to finish...
Thread2->RemoteObjectReference.doSomething();
wait thread 2 to finish...
Thread3->RemoteObjectReference.doSomething();
或同时:
Thread1->RemoteObjectReference.doSomething();
Thread2->RemoteObjectReference.doSomething();
Thread3->RemoteObjectReference.doSomething();
都在同一时间,即使是同一远程对象?
我希望我足够清楚。 谢谢!
我要问的是,当我在此对象上调用方法时,是CLIENT执行服务器代码吗?
没有。
还是服务器依次调用该对象上的方法?
它是服务器,但是顺序没有定义。
他们会顺序调用吗
没有定义。
或同时:
没有定义。
更明确地说,RMI规范特别声明不保证有关客户端线程和服务器线程之间的关联。
您可以从中得出的所有结论是,您不能假定它是单线程的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.