在Java程序退出时,希望做一些保存处理,比如释放一些资源,或者保证事务执行完再推出。
在Linux环境下,需要使用kill -15 pid命令杀死进程,才能得到通知。
而window环境下,只能通过ctrl+c退出才有效,命令杀死进程或者任务管理器杀死,都不会得到通知。
第一种方式
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
System.out.println("关闭,事后处理");
bossG.shutdownGracefully();
workerG.shutdownGracefully();
}
});
第二种
String s =System.getProperties().getProperty("os.name").toLowerCase().startsWith("win")?"INT":"TERM";
System.out.println(s);
Signal signal = new Signal(s);
Signal.handle(signal, new SignalHandler() {
@Override
public void handle(Signal signal) {
System.out.println("关闭");
bossG.shutdownGracefully();
workerG.shutdownGracefully();
}
});