Motan源码阅读--ShutDownHook使用

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

public class ShutDownHookListener implements ServletContextListener {    @Override
    public void contextInitialized(ServletContextEvent sce) {
    }    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ShutDownHook.runHook(true);
    }
}

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

public class ShutDownHook extends Thread

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

private ArrayList<closableObject> resourceList = new ArrayList<closableObject>();

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

 resourceList.clear();

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

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

ShutDownHook.registerShutdownHook(new Closable() {            @Override
            public void close() {                if (!executorService.isShutdown()) {
                    executorService.shutdown();
                }
            }
        });

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

原文发布于微信公众号 - 服务端技术杂谈(develop_king)

原文发表时间:2018-09-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术博文

URI与URL的区别

Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过通用资源标志符(Universal Resource Identifier, 简...

33360
来自专栏拂晓风起

java web部署 启动线程 (监听socket等)

20770
来自专栏别先生

基于jsp+servlet图书管理系统之后台用户信息删除操作

上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库!   此次删除操作的源码和数据库:http:...

402100
来自专栏大学生计算机视觉学习DeepLearning

c++ 网络编程(九)TCP/IP LINUX/windows--使用IOCP模型 多线程超详细教程 以及 多线程实现服务端

原文链接:https://www.cnblogs.com/DOMLX/p/9661012.html

51420
来自专栏web前端教室

html5-canvas画板视频教程

本例重点 1、touch相关事件; 2、需求拆解、分析; 3、e.targetTouches事件对象:是当前对象上所有触摸点的列表; 4、moveTo()、li...

27660
来自专栏Java3y

过滤器第一篇【介绍、入门、简单应用】

什么是过滤器 过滤器是Servlet的高级特性之一,也别把它想得那么高深,只不过是实现Filter接口的Java类罢了! 首先,我们来看看过滤器究竟Web容器的...

27950
来自专栏HTML5学堂

2016.06 第二周 群问题分享

HTML+CSS display:none与visibility:hidden相同点与不同点 2016.06.06~2016.06.10 核心概念 displa...

34180
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列19-Struts2

Struts2 (技术版本可能过低大家答题时换成最新的即可) 1 该案例包括首页,用户登陆、网站向导页面。就这么简单,没有深奥的struts概念,主要靠动手,然...

33360
来自专栏玩转JavaEE

SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题(二)

当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异。笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来...

1.1K90
来自专栏Java3y

监听器第二篇【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。 统计网站在线人数 分析 我们在网站中一般使用Sessi...

43790

扫码关注云+社区

领取腾讯云代金券