前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Motan源码阅读--ShutDownHook使用

Motan源码阅读--ShutDownHook使用

作者头像
春哥大魔王
发布2018-09-21 11:18:39
3930
发布2018-09-21 11:18:39
举报

任何一个中间件系统,都需要有个“平滑部署,平滑下线”的功能。 如果基于Java开发,往往采用ShutDownHook去做这件事情。 比如我们在tomcat关闭时,注册ServletContextListener,在上下文销毁时,进行ShutDownHook调用。

代码语言:javascript
复制
public class ShutDownHookListener implements ServletContextListener {    @Override
    public void contextInitialized(ServletContextEvent sce) {
    }    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ShutDownHook.runHook(true);
    }
}

我们启动一个单独的线程去做后面的清理动作。

代码语言:javascript
复制
public class ShutDownHook extends Thread

我们清理的目标是一个集合对象:

代码语言:javascript
复制
private ArrayList<closableObject> resourceList = new ArrayList<closableObject>();

通过遍历集合,一个个close对应的资源。 在资源close之后我们清空这个集合:

代码语言:javascript
复制
 resourceList.clear();

那么这个resourceList集合中究竟有什么东西呢? 我们可以放入任何我们可以进行资源回收的东西进去,比如io链接,网络资源,线程池。

比如我们在类中创建定时执行线程池,我们可以把这个线程池注册到我们要回收的集合中:

代码语言:javascript
复制
ShutDownHook.registerShutdownHook(new Closable() {            @Override
            public void close() {                if (!executorService.isShutdown()) {
                    executorService.shutdown();
                }
            }
        });

这样我们可以让这个心跳上报线程,完成他的上报使命后,在退出jvm。

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

本文分享自 春哥talk 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档