有人可以验证我是否正确理解了Java RMI吗?
如果我有:
public class Server extends UnicastRemoteObject
{
public Server() throws RemoteException
{
super();
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
try
{
Naming.rebind("rmi://someAddress/someName" , this);
}
catch (MalformedURLException ex)
{
}
catch (ConnectException ex)
{
}
/* do sometnig else there */
}
}
这意味着如果有100个客户端连接,RMI会创建100个这个服务器的副本作为线程来方便那些客户端(没有我的进一步干预)?
答案 0 :(得分:1)
不,如果连接了100个客户端,RMI注册表将管理许多单独的线程,这些线程全部针对Server
类的单个实例执行。
最有可能的是,每个客户端连接都会产生一个新线程,可能是多个线程,但永远不会创建Server
的新实例。
答案 1 :(得分:0)
这意味着如果有100个客户端连接,RMI会创建100个这个服务器的副本作为线程来方便那些客户端(没有我的进一步干预)?
没有'创建此服务器的100个副本作为线程'。 您创建服务器的任何实例,RMI创建尽可能多的线程来调用服务器的方法。服务器中所需的任何同步都取决于您。