【问题标题】:Java RMI threads on client-side are executing sequentially or concurrently when calling the same remote object?调用同一个远程对象时,客户端的 Java RMI 线程是按顺序执行还是同时执行?
【发布时间】:2014-07-16 08:33:08
【问题描述】:

我无法理解 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 对象的所有相同引用。

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

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


所以假设我们有:

线程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 multithreading client-server rmi client-side


【解决方案1】:

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

没有。

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

它是服务器,但没有定义顺序。

他们是否按顺序调用它

没有定义。

或同时:

没有定义。

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

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

【讨论】:

  • 因此,如果我有 30 个线程在远程对象上调用相同的方法,则此方法的睡眠时间为 5 秒...是需要 30*5 秒还是我们大约是 5 秒时间?
  • “未定义”的哪一部分你不明白?
  • 做了一个测试程序并多次运行它总是需要5秒。我在这里找到了这个解释:comp.lancs.ac.uk/~weerasin/csc253/tutorials/week7.html“因此,如果你从不同的客户端进行远程调用(在不同的 JVM 中执行),每个调用都将在一个单独的线程中运行。但是,如果你从同一个客户端进行并发调用(这可以是通过使用客户端线程来实现,见下文)那么这些调用可能会在同一个服务器线程上执行。”无论如何,谢谢。
  • 我引用了 RMI 规范。您不能引用非规范性参考来反驳这一点。你引用的那个自相矛盾。您要询问的行为是故意且明确未指定的。时期。您可能观察到的任何行为都是该实现的行为。一夜之间可以免费更换。
  • 我没有拒绝任何事情。我只是想了解我目前正在研究的东西的特殊行为。可能我将不得不更好地研究它以获得更深入的理解。我观察到的行为与我在网上找到的来源兼容,这是我在上一个答案中提供的来源之一。我不想在这里证明什么。只是认为似乎是一个简单的问题有一个简单的答案(是的,我得到“它没有定义”)。正如你所说,我必须提供一个 RMI 规范,从现在开始我会确保从那里学习。感谢您的宝贵时间。
猜你喜欢
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
相关资源
最近更新 更多