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));
}
分享到:
相关推荐
一般不能实例化一个 Runtime 对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前 Runtime 运行时对象的引用。 一旦得到了一个当前的 Runtime 对象的引用,就可以调用 Runtime ...
JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1)程序正常退出 2)使用System.exit() 3)终端使用Ctrl+C触发的...
通过调用`Runtime.getRuntime().addShutdownHook(Thread t)`方法,可以将一个已经初始化但尚未开始执行的线程作为`shutdown hook`注册到JVM中。 以下是一个简单的`shutdown hook`实现示例: ```java public class ...
你可以通过`Runtime.getRuntime().addShutdownHook(Thread hook)`注册自定义的`Thread`,在程序退出前进行必要的清理工作,如关闭文件流、释放网络连接等。 此外,Java还提供了`Thread.stop()`和`Thread.interrupt...
- `getRuntime().addShutdownHook(Thread hook)`: 注册一个关闭钩子,当JVM准备终止时,会调用该线程。 - `destroyForcibly()`: 强制停止由`exec`方法启动的进程。 5. **垃圾收集**: - `gc()`: 请求垃圾收集器...
如果需要更精细的控制,可以考虑使用`Runtime.addShutdownHook(Thread hook)`来注册一个关闭钩子。 #### 5. 使用网络资源和远程服务 - 在开发需要访问网络资源的应用时,应确保使用的网络库和协议是跨平台的。 - ...
15. **关闭钩子(Shutdown Hook)**:通过`Runtime.getRuntime().addShutdownHook(Thread hook)`注册自定义的关闭钩子,这些钩子在JVM关闭时执行,用于清理资源。 16. **精灵线程(Daemon Thread)**:精灵线程是不...
- `addShutdownHook(Thread hook)`: 注册一个程序关闭钩子,当JVM准备退出时,这些钩子会被调用。 总的来说,Java的Runtime类是Java程序与运行环境交互的重要工具,它提供了一系列方法,使得开发者能够更好地管理...
4. 使用`Runtime.getRuntime().addShutdownHook(Thread hook)`方法将钩子注册到JVM中。 **钩子执行时机**: - 程序正常运行完毕并退出。 - 用户在命令行界面通过`Ctrl+C`或其他方式中断程序。 - JVM遇到`...
可以使用`Runtime.getRuntime().addShutdownHook(Thread hook)`来添加一个钩子。 5. **Spring Boot应用关闭**: - 如果"shutdown-app"是在Spring Boot环境下,那么可能涉及到`@PreDestroy`注解,它标记在方法上,...
Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { watchService.close(); } catch (Exception e) { } })); } } ``` 上述代码首先定义了一个名为TestWatchService的类和main方法。在main方法...