我的申请可能有问题。有一个运行多个线程的客户端可能会通过 Java RMI 对服务器执行相当耗时的调用。当然,来自一个客户的耗时调用不应该阻止其他人。
我测试了它,它可以在我的机器上运行。所以我在客户端上创建了两个线程,在服务器上创建了一个虚拟调用。在启动时,客户端都调用只执行大量 sysout 的虚拟方法。可以看出这些调用是并行处理的,没有阻塞。
我非常满意,直到一位同事指出 RMI 规范不一定保证该行为。
确实,关于兰开斯特大学惠普的一篇文章指出
“A method dispatched by the RMI runtime to a remote object implementation (a server) may or may not execute in a separate thread. Calls originating from different clients Virtual Machines will execute in different threads. From the same client machine it is not guaranteed that each method will run in a separate thread” [1]
我该怎么办?有没有可能它在实践中行不通?
最佳答案
理论上,是的,您可能需要担心这一点。实际上,所有主流的 rmi 都会对所有传入调用进行多线程处理,因此除非您针对一些晦涩的 jvm 运行,否则您无需担心任何事情。
关于关于线程使用的 Java RMI 规范 : "..may or may not execute in a separate thread",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6858787/