Skip to main content

One post tagged with "Spring Boot"

View All Tags

· 6 min read
Dylan Li

原生 JVM 进程的优雅退出 - ShutdownHook

下面一段代码是最常用的一种优雅关闭实现,使用 Runtime.getRuntime().addShutdownHook() 可以向 JVM Runtime 注册一条 Hook Thread 实例,用于执行我们的优雅关闭逻辑, 值得注意的是,这个 Thread 实例并不会立刻被调度执行。 当我们从 OS 层面向 JVM 进程传递某些 Signal(信号)后,这个 Hook 线程才会被运行。


public class ShutdownHookExample {

private static volatile boolean running = true;

public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Shutdown Hook is activated");
//close resources...
//change running signal to false.
running = false;
}
}));
System.out.println("The Java Virtual Machine is running!");
while (running) {
//jvm is running.
}
//when running signal is false, main thread will println this line.
System.out.println("The Java Virtual Machine shut down gracefully");
}
}

那么前面所说的 Signal 到底是什么呢?