ShutdownHook是啥东西?
在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源、平滑退出的功能。 使用Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用: 1. 程序正常退出 2. 使用System.exit() 3. 终端使用Ctrl+C触发的中断 4. 系统关闭 5. 使用Kill pid命令干掉进程
shutdownHook
是一种特殊的结构,它允许开发人员插入JVM关闭时执行
的一段代码。这种情况在我们需要做特殊清理操作
的情况下很有用
怎么使用?
看下Runtime中的方法
addShutdownHook
1 | public void addShutdownHook(Thread hook) { |
removeShutdownHook
1 | public boolean removeShutdownHook(Thread hook) { |
可以看到就是添加一个钩子到JVM里面去,这个钩子就是一个线程,在特定情节下会被调用。
1 | Runtime.getRuntime().addShutdownHook(new Thread(() -> { |
用法简单,但是呢开发的时候很烦,因为我使用的是IDEA来开发,然后每次Terminate程序的时候点击的IDE的终止按钮。然后百度了一下,发现大部分都是通过另外启一个线程接受在console的输入,然后调用System.exit(0)来terminate程序(IDEA或者Eclipse这样的Terminate是异常中断,调用的System.exit(1))。所以修改了一下程序如下:
1 | package com.design.test; |
程序运行结果如下:
1 |
|