java RMI线程系统

时间:2014-10-27 21:28:10

标签: java multithreading rmi

假设一个简单的java RMI系统(Hello World),我的问题是,如果我在客户端运行10个线程来调用远程(服务器)对象,那么目标服务器是否也会创建10个线程?或者他们将通过队列或什么进行? 问题:可能有一些并发调用远程对象,其中一个可能需要一个显着的时间来处理,所以现在我应该关注服务器端的线程,或者可能有一些实现可用于这种情况。
提前谢谢。

1 个答案:

答案 0 :(得分:5)

没有指定。 RMI规范所说的就是客户端线程和服务器线程之间没有保证的关联。

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

具体实施如何表现取决于他们。例如,Oracle的RMI / JRMP每个接受的连接使用一个新线程,没有排队,但这可以通过客户端的连接池来缓解。上次我看,IBM使用了一个线程池,这意味着一个队列。还有其他实现。

一般来说,您上一个问题的答案是,除了确保最小但足够的同步之外,您不必做任何事情。

编辑 @ Cyber​​neticTwerkGuruOrc删除答案中的链接的一些评论,这些评论指的是在2002年的RMI上构建的一个模糊且过时的框架:

  1. 他一直在说自主'他的意思是异步'
  2. 他错误地认为连接线程永远挂起'如果客户回家了,那就是
  3. 你需要有大量的客户争夺其中一个人的资源才能回家。因为等待。
  4. 您已经可以通过系统属性在RMI中获得客户端超时。
  5. 使用Object.wait()和通知线程实现超时是极端原因。
  6. 客户端通常不能关闭服务器。服务器应该在自己的甜蜜时间关闭自己。在远程接口中包含shutdown()方法是表面上安全漏洞。
  7. 他滥用了“持久性”一词。持久性服务器在重新启动后仍然存在,例如Activatable
  8. 术语'线程记忆'没有出现在Java语言规范的第17章中。他正在将正式的内存模型与运行时实际发生的事情混为一谈。