想知道如何以编程方式从关闭挂钩访问System.exit
中的退出状态?不同类型的关闭需要在我的应用程序中导致不同的逻辑(如何“难以”关闭),我想到这样做的一些方法,但这将是最简单的。
答案 0 :(得分:2)
如果您真的对此进行了设置,请查看我链接的问题。但是,您不需要从钩子访问代码。设置退出代码时,您确切知道需要哪种“类型”的关闭。此时可以动态指定关闭行为。而不是在执行开始时注册关闭钩子,然后执行此操作:
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);
}
可以修改此基本方法,以满足项目的设计需求和拆卸逻辑的复杂性。有机会申请继承。您还可以创建一些非常小且特定的钩子,并根据您需要的行为单独注册(推荐)。可能性是无穷无尽的,如果不知道你想要做什么的具体细节,很难推荐更具体的设计。
现在这一切都很好,但是这里的东西应该尽量减少,因为当你的关机钩子运行时执行处于相当脆弱的状态。如果您发现自己需要非常复杂的行为,可能需要重新检查整体设计。
我还应该提一下,以上述方式使用线程会有一些内存管理问题。