`
Riddick
  • 浏览: 640787 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Runtime.addShutdownHook(Thread hook)方法解析

    博客分类:
  • J2SE
阅读更多
Runtime.addShutdownHook(Thread hook),JDK帮助文档中的解释是:
注册新的虚拟机来关闭钩子,Java虚拟机会为了响应以下两类事件而关闭:
1)程序正常退出,这发生在最后的非守护线程退出时,或者在调用exit方法时;
2)为响应用户中断而终止虚拟机,或发生系统事件,比如用户注销或系统关闭.

关闭钩子hook只是一个已初始化但未启动的线程.虚拟机开始启动其关闭序列时,它会以某种未指定的顺序启动所有已注册的关闭钩子,并让它们同时运行.

该函数的作用就是在你的程序结束前,执行一些清理工作,尤其是没有用户界面的程序.很明显,这些关闭钩子都是线程对象,因此,清理工作要写在run()里.根据JDK帮助文档,清理工作不能太耗时,要尽快结束,但仍然可以对数据库进行操作.
例子:
    /**
     * Add shutdown hook.
     */
    private void addShutdownHook(final FtpServer engine) {

        // create shutdown hook
        Runnable shutdownHook = new Runnable() {
            public void run() {
                System.out.println("Stopping server...");
                engine.stop();
            }
        };

        // add shutdown hook
        Runtime runtime = Runtime.getRuntime();
        runtime.addShutdownHook(new Thread(shutdownHook));
    }
分享到:
评论
1 楼 zhengyutong 2010-01-09  
嗯,学习了。

相关推荐

    深入研究java.lang.Runtime类.doc

    一般不能实例化一个 Runtime 对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前 Runtime 运行时对象的引用。 一旦得到了一个当前的 Runtime 对象的引用,就可以调用 Runtime ...

    Java应用中使用ShutdownHook友好地清理现场

     JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:  1)程序正常退出  2)使用System.exit()  3)终端使用Ctrl+C触发的...

    解析Runtime中shutdown hook的使用详解

    通过调用`Runtime.getRuntime().addShutdownHook(Thread t)`方法,可以将一个已经初始化但尚未开始执行的线程作为`shutdown hook`注册到JVM中。 以下是一个简单的`shutdown hook`实现示例: ```java public class ...

    java 程序的退出的资源

    你可以通过`Runtime.getRuntime().addShutdownHook(Thread hook)`注册自定义的`Thread`,在程序退出前进行必要的清理工作,如关闭文件流、释放网络连接等。 此外,Java还提供了`Thread.stop()`和`Thread.interrupt...

    Runtime 源码分析

    - `getRuntime().addShutdownHook(Thread hook)`: 注册一个关闭钩子,当JVM准备终止时,会调用该线程。 - `destroyForcibly()`: 强制停止由`exec`方法启动的进程。 5. **垃圾收集**: - `gc()`: 请求垃圾收集器...

    java-编写跨平台Java程序注意事项

    如果需要更精细的控制,可以考虑使用`Runtime.addShutdownHook(Thread hook)`来注册一个关闭钩子。 #### 5. 使用网络资源和远程服务 - 在开发需要访问网络资源的应用时,应确保使用的网络库和协议是跨平台的。 - ...

    JAVA并发编程实践-线程的关闭与取消-学习笔记

    15. **关闭钩子(Shutdown Hook)**:通过`Runtime.getRuntime().addShutdownHook(Thread hook)`注册自定义的关闭钩子,这些钩子在JVM关闭时执行,用于清理资源。 16. **精灵线程(Daemon Thread)**:精灵线程是不...

    Java Runtime类详解_动力节点Java学院整理

    - `addShutdownHook(Thread hook)`: 注册一个程序关闭钩子,当JVM准备退出时,这些钩子会被调用。 总的来说,Java的Runtime类是Java程序与运行环境交互的重要工具,它提供了一系列方法,使得开发者能够更好地管理...

    通过JDK源码分析关闭钩子详解

    4. 使用`Runtime.getRuntime().addShutdownHook(Thread hook)`方法将钩子注册到JVM中。 **钩子执行时机**: - 程序正常运行完毕并退出。 - 用户在命令行界面通过`Ctrl+C`或其他方式中断程序。 - JVM遇到`...

    shutdown-app

    可以使用`Runtime.getRuntime().addShutdownHook(Thread hook)`来添加一个钩子。 5. **Spring Boot应用关闭**: - 如果"shutdown-app"是在Spring Boot环境下,那么可能涉及到`@PreDestroy`注解,它标记在方法上,...

    Java利用WatchService监听文件变化示例

    Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { watchService.close(); } catch (Exception e) { } })); } } ``` 上述代码首先定义了一个名为TestWatchService的类和main方法。在main方法...

Global site tag (gtag.js) - Google Analytics