JAVA ShutdownHook钩子使用

@Component
public class GouZi implements InitializingBean {
    private static final Logger LOGGER = LoggerFactory.getLogger(GouZi.class);

    private final ExecutorService executorService = Executors.newFixedThreadPool(8);

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("东科教育");
        //钩子方法
        Runtime.getRuntime().addShutdownHook(new Thread(){
            @Override
            public void run() {
                //写上你需要钩子处理的业务逻辑,下面为一个例子,防止服务宕机时,线程没有关闭
                executorService.shutdown();
                System.out.println("www.dongkit.com");
            }
        });
        System.out.println("高薪就业");
    }
}

当初始化bean的时候走到咱们的afterPropertiesSet方法当中,那么咱们的钩子什么时候执行?

输出结果为:

        东科教育

        高新就业

        www.dongkit.com

由此看出钩子方法是在主程序走完后调用。

 

简单介绍下InitializingBean :接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法.该方法将在所有的属性被初始化后调用,但是会在init前调用。

钩子:Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。

JDK提供了Java.Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在一下几种场景中被调用:

     1.程序正常退出

     2.使用System.exit()

     3.终端使用Ctrl+C触发的中断

     4.系统关闭

     5.OutOfMemory宕机

     6.使用Kill pid命令干掉进程(注:在使用kill -9 pid时,是不会被调用的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值