前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RunTime的回调钩子

RunTime的回调钩子

作者头像
写一点笔记
发布2022-08-11 16:58:56
4450
发布2022-08-11 16:58:56
举报
文章被收录于专栏:程序员备忘录程序员备忘录

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

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

这里我们做个小demo

代码语言:javascript
复制
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方法。

早呀~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 写点笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档