繁体   English   中英

调用相同的远程对象时,客户端上的Java RMI线程是顺序执行还是并发执行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM