Java优雅退出
程序员文章站
2022-04-22 21:55:50
...
Java关闭时的回调
Runtime-ShutdownHook
- 当在JVM崩溃,无法接收到信号量和kill -9 pid时无法执行。
- 当存在多个ShutdownHook时,JVM无法保证它们执行的先后顺序
- 在JVM关闭期间不能动态的添加或者去除ShutdownHook
- 不能在Shutdownhook中调用System.exit(),它会卡住JVM,导致进程无法退出。
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.err.println("Shutdown hook execute");
}
}));
Signal
- 避免耗时操作,否则会阻塞线程。
- 系统收到
kill pid
或者Ctrl+C
时候退出
String osType = System.getProperties().getProperty("os.name").toLowerCase().startsWith("win") ?"INT":"TERM";
Signal sig = new Signal(osType);
Signal.handle(sig, new sun.misc.SignalHandler() {
@Override
public void handle(Signal signal) {
System.err.println("Signal exit");
}
});
下一篇: Java根据url生成二维码