在 System.exit(0) 处解除绑定
Posted
技术标签:
【中文标题】在 System.exit(0) 处解除绑定【英文标题】:Unbind at System.exit(0) 【发布时间】:2016-01-27 10:25:57 【问题描述】:我正在使用 Java RMI。问题是,通过关闭线程或调用System.exit(0)
,我需要在RMI 注册表中注册的对象执行unbind()
以删除与该对象的所有关联。当我们执行System.exit(0)
时,对象已经注册到RMI注册中心了。
我如何通过调用System.exit(0)
来做到这一点,unbind()
是由特定的对象组成的?我曾想过制作一个 System.exit()
覆盖,但显然这不是解决方案。
【问题讨论】:
【参考方案1】:问题在于,通过关闭线程或调用
System.exit(0)
,我需要在RMI 注册表中注册的对象执行unbind()
以删除与该对象的所有关联。
那就这样做吧。但是没有“关闭线程”这样的事情,甚至退出线程也不需要你解绑任何东西。
当我们执行
System.exit(0)
时,该对象已经在 RMI 注册表中注册了。
很好,所以unbind()
会成功。不知道她在说什么。您的意思是“仍然注册”吗?
我如何通过调用
System.exit(0)
来做到这一点,unbind()
是由特定的对象组成的?
你不能。您必须在 System.exit()
调用之前加上 unbind()
调用。
我曾考虑过创建一个
System.exit()
覆盖,但显然这不是解决方案。
你不能覆盖静态方法,System
是最终的。
看来你可能已经把System.exit()
喷的到处都是,这已经是不好的做法了。
简单的答案是根本不调用System.exit()
,而是取消绑定并取消导出对象改为。然后 RMI 线程将退出,而您的 JVM 将自行退出,只要您没有任何自己的非守护线程。
【讨论】:
以上是关于在 System.exit(0) 处解除绑定的主要内容,如果未能解决你的问题,请参考以下文章