java – RMI Server不会使用LocateRegistry.createRegistry方
我现在使用的是LocateRegistry.createRegistry(1099)而不是在外部进程中使用注册表.但是,在主程序结束后,注册表将会死亡.例如,如果我创建一个创建注册表的简单程序,它将无法工作,因为在main executino之后代码结束.我期待LocateRegistry代码创建一个线程,但似乎并非如此.这是使用LocateRegistry的正常行为还是我遗漏了什么? 代码示例:
RMI服务器启动并突然死亡.怎么样 最佳答案
这不是那么简单. >导出新端口上的第一个对象会创建一个侦听该端口的线程,并且取消导出侦听端口的最后一个对象会导致该线程退出.这适用于所有远程对象,而不仅仅是本地Registry对象. 您的JVM退出是因为您没有将LocateRegistry.createRegistry()返回的值保存在静态变量中,因此它获取GC,因此对象未被导出,因此端口1099上没有导出远程对象,因此该线程监听1099个出口,因此没有非守护进程线程,因此JVM退出. 解决方案:将LocateRegistry.createRegistry()的结果存储在静态变量中.当您希望JVM退出时,可以使用它来取消导出注册表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |