Chapter 16 : Shutdown Hook
概览
有些时候,我们需要我们的应用在结束时 执行一些clean的代码。但是,不能指望由用户永远按照我们设定的方式退出。
幸好 JVM 提供了一种方法,能够保证我们的clean up代码一定会执行。
在java中,jvm在下面两种事件发生时会关闭:
(1)程序正常退出,即System.exit方法执行。 或, 最后一个非守护线程退出。
(2)用户强制退出,比如ctrl+c 或者是直接关电脑。
在关闭时,能确定的事情是 jvm一定会走下面两步:
(1)jvm启动所有注册的shutdown hooks(如果存在)。
(2)jvm调用所有的uninvoked finalizers(如果必要)。
下面给出一个简单的例子:
首先 定义一个hook:
ShutdownHook.java
public class ShutdownHook extends Thread {
public void run() {
System.out.println("Shutting Down");
}
}
然后,注册这个hook
public class ShutdownHookDemo {
public static void main(String[] args) {
ShutdownHookDemo demo = new ShutdownHookDemo();
demo.start();
try{
System.in.read();
}catch(Exception e) {
}
}
public void start() {
System.out.println("Demo");
ShutdownHook hook = new ShutdownHook(); // 创建一个hook
Runtime.getRuntime().addShutdownHook(hook); // 注册这个hook
}
}
后面还有个swing程序的例子。hook类被作为内部类实现,方便访问到外部类中的私有成员。
Shutdown Hook in Tomcat
Tomcat的shutdown hook在org.apache.catalina.startup.Catalina类中。以内部类的形式实现,如下:
protected class CatalinaShutdownHook extends Thread {
public void run() {
if (server != null) {
try {
((Lifecycle) server).stop();
} catch (LifecycleException e) {
System.out.println("Catalina.stop: " + e);
e.printStackTrace(System.out);
if (e.getThrowable() != null) {
System.out.println("----- Root Cause -----");
e.getThrowable().printStackTrace(System.out);
}
}
}
}
}
(完毕)
分享到:
相关推荐
《How Tomcat Works》是一份深入探讨Apache Tomcat工作原理的重要资源,包含了英文PDF文档、中文HTML翻译以及源代码,旨在帮助读者理解Tomcat服务器的内部运作机制。这份资料是IT从业者,特别是Java Web开发者、系统...
在《How Tomcat Works》这本书中,作者详细剖析了Tomcat的内部工作机制,特别是对Tomcat的4.1.12和5.0.18两个版本的源代码进行了深入的分析。本书通过逐步揭示Tomcat的各个组件,帮助读者理解Tomcat的内部结构和运作...
《How Tomcat Works》这本书及其源代码,为开发者提供了深入理解Tomcat内部工作机制的宝贵资源。本文将基于提供的文件名"如何Tomcat工作",结合Tomcat的工作流程,深入探讨其核心组件和功能。 1. **Tomcat架构概述*...
通过阅读和理解Tomcat的源代码,可以深入了解其内部工作流程,从而提升自定义扩展和调试的能力。《HowTomcatWorksApps.zip》这个压缩文件可能包含了一些示例应用或代码片段,供读者实践和研究。 总的来说,《How ...
4. **JSP编译**:Tomcat在首次遇到JSP页面时,会将其转换为Servlet源代码并编译成.class文件。这个过程涉及JSP标签库、EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)的解析。 5. **...
《How Tomcat Works》是一本深入解析Apache Tomcat服务器内部工作原理的重要参考资料,它提供了对Tomcat架构的全面理解,包括其设计、配置和优化。这本书的中文版和英文版都为读者提供了便利,无论你是母语为中文...
作为一本面向中高级开发者的书籍,《how tomcat works》不仅为读者提供了丰富的理论知识,还提供了许多实用的示例和源代码分析,帮助读者更好地理解概念,并应用到实践中去。例如,书中提到了如何为Tomcat实现自定义...
《HowTomcatWorks》是一本深入解析Apache Tomcat工作原理的书籍,中文版的发布使得更多的中国开发者能够理解和掌握这款广泛应用的开源Java Servlet容器的工作机制。Tomcat是Apache软件基金会Jakarta项目的一部分,它...
"how-tomcat-works-master_howtomcatworks_"是一个关于Tomcat工作原理的源码分析项目,经过整理后可以在IntelliJ IDEA中直接运行,为开发者提供了一手的实践平台。 首先,我们要了解Tomcat的核心组件。Tomcat主要由...
"HowTomcatWorks"项目,正如其名,旨在帮助开发者了解Tomcat的工作原理,通过源代码分享,使我们有机会深入探究这个强大的服务器内部机制。 1. **Tomcat架构概览** Tomcat的架构设计分为几个主要部分:Catalina...
《深入剖析Tomcat》这本书是Java开发者们了解和学习Tomcat服务器的重要参考资料,它详细解析了Tomcat的工作原理和内部机制。随书源码则为读者提供了实践和探索的平台,帮助读者更深入地理解书中的理论知识。下面将...
而"HowTomCatWorks"很可能是源码的目录或者解压后的源代码文件,读者可以直接查看和分析Tomcat的源代码,这对于深入学习和定制Tomcat非常有帮助。 总的来说,这份资料对于想要深入了解Tomcat、提升服务器性能的...
而"jakarta-tomcat-4.1.12-src.zip"和"jakarta-tomcat-5.0.18-src.zip"则包含了对应版本的源代码,这些源代码对于学习Tomcat的架构设计、模块划分以及代码实现非常关键。同时,源码包通常还包括构建脚本,读者可以...
【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...
how tomcat works 中文版 1-20章 现在全了 不光前四章 感谢 macula7 的空间 http://hi.baidu.com/macula7/blog/item/81fd14cbb7059f8dc81768d8.html 其翻译了 how tomcat works 还写了tomcat源代码学习
《How Tomcat Works》是一份详细阐述Tomcat工作原理的资源,包含英文版电子书和源代码。Tomcat是Apache软件基金会的项目,它是一个开源的Java Servlet容器,广泛用于部署Java Web应用程序。这份资料旨在帮助读者深入...
本篇文章将深入剖析"HowTomcatWorks",帮助读者全面理解Tomcat的内部工作机制。 1. **Tomcat架构概述** Tomcat由一系列组件构成,包括Catalina(核心Servlet容器)、Jasper(JSP引擎)、 Coyote(HTTP/HTTPS连接器...
通过阅读《HowTomcatWorks》这本书和分析相关的源代码,开发者可以更深入地理解Tomcat的工作原理,从而在实际开发中更有效地利用Tomcat,解决性能问题,提高系统的稳定性和可扩展性。对于希望成为高级Java Web开发...