客户端的 Java RMI 线程在调用同一个远程对象时是按顺序还是并发执行?

Java RMI threads on client-side are executing sequentially or concurrently when calling the same remote object?

提问人:arocketman 提问时间:7/16/2014 更新时间:7/16/2014 访问量:1032

问:

我无法理解 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();

同时,即使这是同一个远程对象?

我希望我足够清楚。谢谢!

Java 多线程客户端 -服务器 RMI 客户端

评论

0赞 arocketman 7/16/2014
我发现我的问题与此类似:stackoverflow.com/questions/1300145/......

答:

1赞 user207421 7/16/2014 #1

我在这里要问的是,当我在这个对象上调用一个方法时,是执行服务器代码的 CLIENT 吗?

不。

还是服务器按顺序调用该对象上的方法?

它是服务器,但未定义顺序性。

他们是否按顺序称呼它

它没有定义。

或同时:

它没有定义。

更明确地说,RMI 规范明确指出,不能保证客户端线程和服务器线程之间的关联。

你只能从中推断出,你不能假设它是单线程的。

评论

0赞 arocketman 7/16/2014
因此,如果我有 30 个线程在远程对象上调用相同的方法,则此方法的睡眠时间为 5 秒......是需要 30*5 秒还是我们在 5 秒左右?
0赞 user207421 7/16/2014
你不明白“它没有定义”的哪一部分?
0赞 arocketman 7/16/2014
做了一个测试程序并运行了很多次,它总是需要 5 秒。我在这里找到了这个解释:comp.lancs.ac.uk/~weerasin/csc253/tutorials/week7.html “因此,如果您从不同的客户端进行远程调用(在不同的 JVM 中执行),则每个调用都将在单独的线程中运行。但是,如果您从同一客户端进行并发调用(这可以通过使用客户端线程来实现,请参阅下文),则这些调用可能会在同一服务器线程上执行。无论如何,谢谢你。
0赞 user207421 7/16/2014
我引用的是 RMI 规范。你不能引用非规范性的参考资料来反驳这一点。你引用的那个自相矛盾。你所询问的行为是故意和明确地没有指定的。时期。您可能观察到的任何行为都是该实现的行为。它可以在一夜之间免费更换。
0赞 arocketman 7/16/2014
我没有拒绝任何事情。我只是想理解我目前正在研究的事物的特定行为。也许我必须更好地研究它才能更深入地理解。我观察到的行为与我在网上找到的来源兼容,这是我在上一个答案中提供的来源之一。我不是想在这里证明什么。只是以为看似一个简单的问题有一个简单的答案(是的,我得到了“它没有定义”)。正如你所说,我必须提供一个 RMI 规范,我将确保从现在开始从那里学习。感谢您抽出时间接受采访。