Java 钩子函数编程技巧
2024-10-14 13:02:35
Java提供注册钩子线程,在JVM进程关闭之前,会自动执行这个钩子线程。
运用这个技巧,可以再JVM关闭之前,释放一些系统资源。
这个功能利用的是Runtime类来实现。
public class Hook { public static void main(String args[]){ System.out.println("程序开始执行");
try{
Thread.sleep(100);
}
catch(Exception ex){ } Runtime.getRuntime().addShutdownHook(new Thread(){ @Override
public void run() {
System.out.println("执行钩子函数 -- " + 1);
}
}); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override
public void run() {
System.out.println("执行钩子函数 -- " + 2);
}
}); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override
public void run() {
System.out.println("执行钩子函数 -- " + 3);
}
}); Runtime.getRuntime().addShutdownHook(new Thread(){ @Override
public void run() {
System.out.println("执行钩子函数 -- " + 4);
}
}); System.out.println("程序执行完毕,退出main");
}
}
输出
可以看到,执行顺序和注册顺序是不一致的。一般也不会 注册多个钩子函数。
程序开始执行
程序执行完毕,退出main
执行钩子函数 -- 2
执行钩子函数 -- 3
执行钩子函数 -- 4
执行钩子函数 -- 1
同时,还提供了移除钩子函数的功能
public boolean removeShutdownHook(Thread hook)
最新文章
- [LeetCode] Same Tree 判断相同树
- C++ Primer Plus读书笔记
- 最大似然估计(MLE)与最小二乘估计(LSE)的区别
- Gevent的长轮询实现方法详解
- Anychart 破解备注
- JS之正则表达式验证URL
- Orcale安装完成后 em管理、性能无法登陆 报:没有找到主机
- 互斥体与互锁 <;第五篇>;
- C---通过指针访问数组
- html5之datalist标签
- C++实现的控制台-贪吃蛇
- springboot(十二):springboot如何测试打包部署
- android中xml tools属性详解(转)
- HTML5 新的 Input 类型
- 计时器setTimeout()
- jmeter读取csv文件
- Random类的常用方法
- Python基础教程学习笔记:第二章 列表和元组
- git工具的使用
- MySQL常用shell语句