java RMI 线程系统

标签 java multithreading rmi

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

最佳答案

未指定。 RMI 规范仅说明客户端线程和服务器线程之间不存在保证关联。

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

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

一般来说,您最后一个问题的答案是,除了确保最小但足够的同步之外,您不必执行任何操作。

编辑对 @Cyber​​neticTwerkGuruOrc 已删除答案中的链接的一些评论,这些评论引用了 2002 年基于 RMI 构建的晦涩且过时的框架:

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

关于java RMI 线程系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26597169/

相关文章:

Java RMI 添加数字

java - 获取 java.rmi.UnmarshalException : unrecognized method hash: method not supported by remote object

java - 是否可以从纯 Java 访问 BDB?

java - 递归地将线程添加到 Java 线程池

java - 从我的应用程序中访问 JVM 的内存使用情况?

c++ - 线程中的异常

python - 如何在使用 Keras 的深度学习中利用多处理和多线程?

java - RMI 导出对象(远程对象,端口);创建注册表(端口);

java - 将控制台 Java 应用程序传输到 Maven

java - 如何在android中使CalendarView垂直滚动