假设一个简单的java RMI系统(Hello World),我的问题是,如果我在客户端运行10个线程来调用远程(服务器)对象,那么目标服务器是否也会创建10个线程?或者他们将通过队列或什么进行?
问题:可能有一些并发调用远程对象,其中一个可能需要一个显着的时间来处理,所以现在我应该关注服务器端的线程,或者可能有一些实现可用于这种情况。
提前谢谢。
答案 0 :(得分:5)
没有指定。 RMI规范所说的就是客户端线程和服务器线程之间没有保证的关联。
这个隐藏的意思是你不能假设它是单线程的。
具体实施如何表现取决于他们。例如,Oracle的RMI / JRMP每个接受的连接使用一个新线程,没有排队,但这可以通过客户端的连接池来缓解。上次我看,IBM使用了一个线程池,这意味着一个队列。还有其他实现。
一般来说,您上一个问题的答案是,除了确保最小但足够的同步之外,您不必做任何事情。
编辑 @ CyberneticTwerkGuruOrc删除答案中的链接的一些评论,这些评论指的是在2002年的RMI上构建的一个模糊且过时的框架:
Object.wait()
和通知线程实现超时是极端原因。shutdown()
方法是表面上安全漏洞。Activatable
。