并发访问远程对象Java RMI

时间:2015-01-03 21:10:17

标签: java multithreading rmi

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

1 个答案:

答案 0 :(得分:2)

  

如何处理对方法的同时调用?

没有指定。它在RMI specification中经过仔细陈述:" RMI运行时不保证将远程对象调用映射到线程。"

这个隐藏的意思是你不能假设服务器是单线程的。

  

换句话说,当有两个(或更多)请求在该线程上执行相同的方法时,在服务器线程中会发生什么?

在同一个线程上执行该方法不能有两个或更多请求。这个问题没有意义。您已经提出了一个独特的服务器线程'但实际上并不存在。

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

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