1

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

4

1 回答 1

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

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

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

我还应该提到以上述方式使用线程有一些内存管理影响。

于 2013-11-14T23:24:06.430 回答