RunTime的回调钩子

项目运行结束得时候可能需要对一些现有得信息进行保存。比如说我们在java进程退出得时候要保存一些数据,下次启动得时候要用到这些数据得情况。Java在1.3得时候就支持了这种特性。这种特性得实现就在类RunTime中。以下四种方式均可出发runtime得回调。

1)程序正常退出 
        2)使用System.exit() 
        3)终端使用Ctrl+C触发的中断 
        4)系统关闭 

这里我们做个小demo

public class TestRunTime {


    static class MyThreadOne extends Thread{


        public void run(){
            System.out.println("stop thread one~~~~");
        }
    }
    static class MyThreadTwo extends Thread{


        public void run(){
            System.out.println("stop thread two~~~~");
        }
    }
    public static void main(String[] args) {
        MyThreadOne myThreadOne=new MyThreadOne();
        MyThreadTwo myThreadtwo=new MyThreadTwo();
        Runtime.getRuntime().addShutdownHook(myThreadOne);
        Runtime.getRuntime().addShutdownHook(myThreadtwo);
    }
}

我们测试一下代码:

看完上边得示例呐,我们看看这个Runtime有那些方法。

私有化自己,这个应该在jvm中直接掉用了。

提供了很多方法,有执行操作系统命令得,有获取内存容量得、退出jvm的,类加载的、垃圾回收的以及我们这里说到的jvm回调钩子。

在添加钩子的的时候,我们看到这里的ApplicationShutDownHooks类。

通过查看代码,发现我们可以添加多个钩子线程。

为了让钩子的添加能够被shutdow类检测,所以这块采用静态块将钩子的运行引用到Shutdown类中。我们jvm最终停止触发的钩子回调应该跟这个shutdown有很大关系。至于这里的runHooks方法就是遍历执行我们的回调线程了哈。

通过查看源代码,发现这块完全可以在Shutdown类中钩子任务。在jvm停机的时候会走runHooks方法。既然有个shutdown了,那为啥还要弄个ApplciationShutdownHooks呐,我的理解就是解耦合。

至于jvm最后回调的是什么方法,个人觉得应该是这里的exit方法。

早呀~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值