以编程方式从关闭钩子访问退出状态

时间:2013-11-14 22:37:25

标签: java exit shutdown shutdown-hook

想知道如何以编程方式从关闭挂钩访问System.exit中的退出状态?不同类型的关闭需要在我的应用程序中导致不同的逻辑(如何“难以”关闭),我想到这样做的一些方法,但这将是最简单的。

1 个答案:

答案 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);
}

可以修改此基本方法,以满足项目的设计需求和拆卸逻辑的复杂性。有机会申请继承。您还可以创建一些非常小且特定的钩子,并根据您需要的行为单独注册(推荐)。可能性是无穷无尽的,如果不知道你想要做什么的具体细节,很难推荐更具体的设计。

现在这一切都很好,但是这里的东西应该尽量减少,因为当你的关机钩子运行时执行处于相当脆弱的状态。如果您发现自己需要非常复杂的行为,可能需要重新检查整体设计。

我还应该提一下,以上述方式使用线程会有一些内存管理问题。