java - 对远程对象 Java RMI 的并发访问

标签 java multithreading rmi

我目前正在研究 Java RMI 的工作原理,但我不明白某些方面。
在非分布式多线程环境中,如果从不同线程同时调用同一对象上的方法,则每个方法都将在各自线程的堆栈上执行(访问共享数据不是我的问题的一部分)。
在分布式系统中,由于客户端进程调用 stub 上的方法,并且实际调用是在创建远程对象的进程的堆栈上执行的,因此如何处理对方法的同时调用?换句话说,当有两个(或更多)请求在该线程上执行相同的方法时,服务器线程会发生什么?
我想到这个问题是因为我想将其与我习惯的进行比较 - 执行在不同的堆栈上。

最佳答案

how are simultaneous calls to a method handled?

未指定。 RMI specification中详细说明了这一点。 :“RMI 运行时不保证将远程对象调用映射到线程。”

这的神秘含义是你不能假设服务器是单线程的。

In other words what happens at the lets say server thread when there are two (or more) requests to execute the same method on that thread?

不能有两个或多个请求在同一线程上执行该方法。这个问题没有意义。您假设了一个实际上并不存在的独特的“假设服务器线程”。

但是,可能有两个或多个执行该方法的请求,这些请求来自两个或多个并发客户端,或者单个客户端中的两个或多个并发线程,或者两者兼而有之,并且由于 RMI 规范的措辞,您不能假设服务器采用单线程调度模型。

在 Oracle/Sun 实现中,它确实是多线程的,与 IBM 实现相同。我不知道有任何非多线程的 RMI 实现,并且任何此类实现基本上都是无用的。

关于java - 对远程对象 Java RMI 的并发访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27759566/

相关文章:

c# - 线程中的异常处理,联系 WCF 服务

c# - 如何正确启动和取消任务。

ios - 为什么 DISPATCH_QUEUE_CONCURRENT 创建的两个并发队列不能同时运行?

java - 远程 JVM 机器人调用

java - JTable 自动更新帮助

java - 如何使用java中的数字签名对文档进行电子签名

java/spring-在 org.springframework.context.support.AbstractApplicationContext 处获取 NoClassDefFoundError

java - 不支持的协议(protocol) : t3 exception while trying to get number of threads in weblogic

java - 在Web服务和业务层之间传递身份验证信息(Spring、tomcat)

java - 能够在 Mac 和 Windows 上运行 jar 但不能在 Ubuntu 上运行