1

我正在使用 Java RMI。问题是,通过关闭一个线程或调用System.exit(0),我需要在 RMI 注册表中注册的对象执行一个unbind()以删除与该对象的所有关联。当我们执行System.exit(0)时,该对象已经在 RMI 注册表中注册。

我如何通过特别调用对象来做到System.exit(0)unbind()一点?我曾考虑过System.exit()覆盖,但显然这不是解决方案。

4

1 回答 1

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 将自行退出,只要您没有任何自己的非守护程序线程。

于 2015-10-28T01:22:17.357 回答