我们如何在项目中使用addShutdownHook?

时间:2013-10-26 02:24:00

标签: spring threadpool shutdown-hook

我看到一些代码像这样使用ShutdownHook

Runtime.getRuntime().addShutdownHook(new Thread(){
    ConfigurableApplicationContext.stop();
    //close spring context;
    threadpool.shutdownnow();
    //close theadpool
});

这样做有什么用处吗?

我想是

当jvm退出时,也许线程会立即关闭 和春天的背景也会关闭;

当我们需要调用System.exit()时,我们接下来要做什么?

1 个答案:

答案 0 :(得分:0)

这实际上取决于您的应用程序以及对象的生命周期以及您在上下文之外看到的那些线程。如果您在独立的java进程中运行spring容器,那么像这样捕获关闭挂钩是一种方法。另一种方法是让它监听tcp端口并发送命令以开始关闭过程。如果您在像tomcat这样的Web容器中运行,那么您应该遵循正常的webapp关闭标准,Spring支持Context Listeners。

我还会考虑重新设计你的应用程序,以便所有线程都使用一个存在于spring容器内的bean来管理。例如,使用为启动/停止方法配置了指令(属性)的bean,然后该bean将使用Executor进行线程池。这样,关闭只关闭Spring容器,Spring为有序关闭bean提供了很好的支持。其中一个bean是将对象保存在Executor中的对象。它比尝试将Spring bean与外部线程集成更简洁。

希望这会有所帮助。