想知道如何通过关闭 Hook 以编程方式访问 System.exit
中的退出状态?不同类型的关闭需要在我的应用程序中导致不同的逻辑(关闭有多“难”),我正在考虑几种方法,但这是最简单的。
最佳答案
如果您真的对此感兴趣,请查看我链接的问题。但是,您不需要从 Hook 访问代码。当您设置退出代码时,您确切地知道您需要哪种“类型”的关机。可以动态指定当时的关闭行为。而不是在执行开始时注册您的关闭钩子(Hook)然后这样做:
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);
}
可以修改此基本方法以适应项目的设计需求和拆卸逻辑的复杂性。有机会申请继承。您还可以创建许多非常小且特定的 Hook ,并根据您需要的行为分别注册它们(推荐)。可能性真的是无穷无尽的,如果不知道您正在尝试做的事情的确切细节,就很难推荐更具体的设计。
现在一切都很好,但问题是 - 拆卸应该尽可能少,因为当您的关闭 Hook 运行时,执行处于相当脆弱的状态。如果您发现您需要非常复杂的行为,您可能需要重新检查您的整体设计。
我还应该提一下,以上述方式使用线程会涉及一些内存管理问题。
关于java - 以编程方式从关闭 Hook 访问退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19989913/