一分钟知识点:钩子函数
时间:2022-07-23
本文章向大家介绍一分钟知识点:钩子函数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我们在阅读源码的时候,偶尔碰到下面这段代码:
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.");
}
}
});
RunTime.getRunTime().addShutdownHook
的作用是往jvm中添加一个钩子,当jvm关闭的时候(程序退出),jvm会调用所有注册的钩子函数。钩子函数启动一个独立的线程,一般用来做资源的关闭和清理。
因为笔者以前是做c++开发的。所以在了解到java的这个特性的时候,当时第一个想法就是,这特么不就是c++的析构函数吗。
在上面的代码示例中,我们就是在钩子函数里调用客户端的stop方法进行资源清理。
再来看一个例子:
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");
}
}
}
输出,
program is running
program is closing
bye,byte
Process finished with exit code 0
- 加速!缓存Python函数的运行结果:Memoization
- WiX安装选项--注册程序集到GAC和VS的设计时环境
- 5 款前沿的WordPress主题后台选项开发框架推荐
- es6 class
- WiX安装选项---开始菜单项
- 代码编辑器Sublime Text 3 免费使用方法与简体中文汉化包下载
- TCP/IP 选项TcpTimedWaitDelay设置
- Windows 远程管理WinRM
- Sublime text 3 中Package Control 的安装与使用方法
- 用functools.lru_cache实现Python的Memoization
- 腾讯互联网与社会研究院秘书长司晓:将联合开展研究合作
- 幻灯片jQuery插件Orbit 介绍(附添加到WordPress教程)
- Gravatar开发者手册
- Gravatar开发者手册
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android webview手动校验https证书(by 星空武哥)
- AndroidStudio Gradle第三依赖统一管理的实现方法
- 小程序上传多张图片到springboot后台,返回可供访问的图片链接
- AndroidStudio Gradle基于友盟的多渠道打包方法
- Android开发之全屏与非全屏的切换设置方法小结
- Android使用GridView实现日历的方法
- Android控件AppWidgetProvider使用方法详解
- R语言使用链梯法Chain Ladder和泊松定律模拟和预测未来赔款数据
- Android ViewPager实现左右滑动的实例
- R语言通过伽玛与对数正态分布假设下的广义线性模型对大额索赔进行评估预测
- R语言中回归模型预测的不同类型置信区间应用比较分析
- 第06期:Prometheus 存储
- 新特性解读 | 数组范围遍历功能
- 技术分享 | MySQL 内存管理初探
- 新特性解读 | 窗口函数的适用场景