前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一分钟知识点:钩子函数

一分钟知识点:钩子函数

作者头像
用户7634691
发布2020-08-10 16:21:32
4070
发布2020-08-10 16:21:32
举报

我们在阅读源码的时候,偶尔碰到下面这段代码:

代码语言:javascript
复制
Runtime.getRuntime().addShutdownHook(new Thread() {

            public void run() {
                try {
                    logger.info("## stop the xxxx client");
                    clientTest.stop();
                } catch (Throwable e) {
                    logger.warn("##something goes wrong when stopping xxxx:", e);
                } finally {
                    logger.info("## xxx client is down.");
                }
            }

        });
代码语言:javascript
复制
RunTime.getRunTime().addShutdownHook

的作用是往jvm中添加一个钩子,当jvm关闭的时候(程序退出),jvm会调用所有注册的钩子函数。钩子函数启动一个独立的线程,一般用来做资源的关闭和清理。

因为笔者以前是做c++开发的。所以在了解到java的这个特性的时候,当时第一个想法就是,这特么不就是c++的析构函数吗。

在上面的代码示例中,我们就是在钩子函数里调用客户端的stop方法进行资源清理。

再来看一个例子:

代码语言:javascript
复制
public class RuntimeDemo {

    public static void main(String[] args) throws Exception {
        Runtime.getRuntime().addShutdownHook(new ProcessHook());
        System.out.println("program is running");
        Thread.sleep(2000);
        System.out.println("program is closing");

    }

    static class ProcessHook extends Thread {
        @Override
        public void run() {
            System.out.println("bye,byte");

        }
    }
}

输出,

代码语言:javascript
复制
program is running
program is closing
bye,byte

Process finished with exit code 0
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 犀牛的技术笔记 微信公众号,前往查看

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

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

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