【问题标题】:Programmatically access exit status from shutdown hook以编程方式从关闭挂钩访问退出状态
【发布时间】:2013-11-15 07:34:24
【问题描述】:
想知道如何通过关闭挂钩以编程方式访问System.exit 中的退出状态?不同类型的关闭需要在我的应用程序中导致不同的逻辑(关闭有多“难”),我正在考虑这样做的几种方法,但这是最简单的。
【问题讨论】:
标签:
java
exit
shutdown
shutdown-hook
【解决方案1】:
如果您真的对此有所准备,请查看我链接的问题。但是,您不需要从钩子访问代码。当您设置退出代码时,您确切地知道您需要哪种“类型”的关机。此时可以动态指定关闭行为。而不是在执行开始时注册您的关闭挂钩,然后执行此操作:
startShutdown(int code) {
System.exit(code);
}
您可以按照以下方式做一些事情:
private Map<Integer, Thread> shutdownHandlerLocator; // initialize this on startup with all of the exit codes and their corresponding handlers
startShutdownTypeA(int code) {
Runtime.getRuntime().addShutdownHook(shutdownHandlerLocator.get(code));
System.exit(code);
}
可以修改此基本方法以适应项目的设计需求和拆卸逻辑的复杂性。有机会申请继承。您还可以创建许多非常小的和特定的钩子,并根据您需要的行为单独注册它们(推荐)。可能性真的是无穷无尽的,如果不知道你想要做什么的确切细节,很难推荐更具体的设计。
现在这一切都很好,但这里的事情是 - 拆解应该尽可能少,因为当您的关闭挂钩运行时,执行处于相当脆弱的状态。如果您发现您需要非常复杂的行为,您可能需要重新检查您的整体设计。
我还应该提一下,以上述方式使用线程会涉及一些内存管理问题。