【问题标题】:Unbind at System.exit(0)在 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() 覆盖,但显然这不是解决方案。
【问题讨论】:
标签:
rmi
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 将自行退出,只要您没有任何自己的非守护线程。