Runtime注入钩子程序

  往往在程序运行时,一些运行异常造成服务停止,但是资源为来得及释放,或者无法通知,这样会不友好。通过JDK中的Runtime.getRuntime().addShutdownHook()方法进行资源释放或者发送消息通知

 

/**
 * @Author: MR LIS
 * @Description:
 * @Date: Create in 17:46 2018/4/20
 * @Modified By:
 */
public class ExitCapture {

    public static void main(String[] args) {
        Runtime.getRuntime().addShutdownHook(new Thread(()->{
            System.out.println("The application will be exit.");
            notifyAndRelease();
        }));

//        int i=0;
        while (true) {
            try {
                Thread.sleep(1_000L);
                System.out.println("I am working");
            } catch (Throwable throwable) {
            }
//            i++;
            //模拟演示循环20次后抛出异常,实际情况不需要
         /*   if(i>20)
                throw new RuntimeException("run error");*/
        }
    }


    private static void notifyAndRelease() {
        System.out.println("notify to admin");
        try {
            Thread.sleep(1_000L);
        } catch (Throwable throwable) {
        }
        System.out.println("release resource、socket、connection and so on");

    }
}

 

 

 

执行结果如下

在linux上通过 kill 进程号 ,和模拟演示中20次一样的效果(程序注释掉的部分),但是如果使用强杀进程,该钩子程序就没有作用,强杀:kill -9 进程号。实际项目中程序抛出异常和 kill 进程号一样的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值