java - 以编程方式从关闭 Hook 访问退出状态

标签 java exit shutdown shutdown-hook

想知道如何通过关闭 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/

相关文章:

gdb - 让 gdb 在断点处退出

linux - 我的进程如何检测计算机是否正在关闭?

c++ - 关机 Hook C++

c# - 正确停止异步 TCP 应用程序

java - 为什么我的字符串不接受 null?

java - 多线程中的Join()

D 退出语句

PHP:exit()、die() 和 return 之间有什么区别;在 "self"和包含的文件中?

java - 改变可绘制背景的值

java - 如何在循环内的嵌套 if 语句中结束 while 循环? (可能很容易)