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

Java 以编程方式从关闭挂钩访问退出状态,java,exit,shutdown,shutdown-hook,Java,Exit,Shutdown,Shutdown Hook,想知道如何以编程方式访问系统中的退出状态。从关机挂钩退出?不同类型的关机需要在我的应用程序中产生不同的逻辑(关机有多“难”),我有几种方法可以做到这一点,但这将是最简单的。如果你真的对此感兴趣,请查看我链接的问题。但是,您不需要从钩子访问代码。设置退出代码时,您确切地知道需要哪种“类型”的关机。此时可以动态指定关机行为。不要在执行开始时注册关闭挂钩,然后执行以下操作: startShutdown(int code) { System.exit(code); } 您可以按照以下思路做一些

想知道如何以编程方式访问
系统中的退出状态。从关机挂钩退出
?不同类型的关机需要在我的应用程序中产生不同的逻辑(关机有多“难”),我有几种方法可以做到这一点,但这将是最简单的。

如果你真的对此感兴趣,请查看我链接的问题。但是,您不需要从钩子访问代码。设置退出代码时,您确切地知道需要哪种“类型”的关机。此时可以动态指定关机行为。不要在执行开始时注册关闭挂钩,然后执行以下操作:

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);
}
私有地图关闭HandlerLocator;//在启动时使用所有的退出代码及其相应的处理程序初始化它
startShutdownTypeA(内部代码){
Runtime.getRuntime().addShutdownHook(shutdownHandlerLocator.get(code));
系统退出(代码);
}
可以修改此基本方法以适应项目的设计需要和拆卸逻辑的复杂性。有机会应用继承。您还可以创建一些非常小的特定钩子,并根据您需要的行为(推荐)分别注册它们。这种可能性真的是无穷无尽的,如果不知道你想要做什么的确切细节,就很难推荐更具体的设计

现在这一切都很好,但这里有一件事-拆卸应该尽可能地少,因为当关闭挂钩运行时,执行处于相当脆弱的状态。如果您发现您需要非常复杂的行为,您可能需要重新检查您的总体设计


我可能还应该提到,以上述方式使用线程会带来一些内存管理方面的影响。

如果您真的打算从钩子访问线程,请查看以下内容: