j2se 工程,通过信号量监听来关闭应用,避免kill -9 的强杀

来源:互联网 发布:手机性能监控软件 编辑:程序博客网 时间:2024/06/09 22:29

j2SE工程,我们通常在main 方法中启动spring 容器来,来启动项目(对于spring 容的的启动,这里我们不关心,或者你用的不是spring,或者你直接是一些简单的逻辑).但是我们应用如何关闭呢。通常情况下,kill -9 进程id 是我们一般的做法。但是有时候,一些资源,或者逻辑需要等待处理完成之后再退出。。

直接上码:

1、我们新建一个关闭的监听信号量监听服务:

import sun.misc.Signal;import sun.misc.SignalHandler;public class ShutDown implements SignalHandler {@Overridepublic void handle(Signal arg0) {if (App.SIGNAL_NAME.equals(arg0.getName())) {// TODO 释放系统资源destory(),close()System.out.print("...... closed!");System.out.print("#######################system.exit-0#########################");System.exit(0);}}}

这里实现了SignalHandler接口,在handle方法实现具体的处理,一般我们都在里面处理资源释放,spring容器关闭。。。。

2、然后在程序入口,注册该监听,才能生效

import sun.misc.Signal;/** * APP */public class App {    public static final String SIGNAL_NAME="USR2"; // linux 中用户自定义的信号量。 kill -12 触发    public static void main( String[] args )    {        // TODO 应用逻辑                // 添加linux 信号量的监听,处理应用关闭的操作        ShutDown shutdown=new ShutDown();    Signal.handle(new Signal(SIGNAL_NAME), shutdown);    }}

ok,至此处理完成。