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)

最新文章

  1. [LeetCode] Same Tree 判断相同树
  2. C++ Primer Plus读书笔记
  3. 最大似然估计(MLE)与最小二乘估计(LSE)的区别
  4. Gevent的长轮询实现方法详解
  5. Anychart 破解备注
  6. JS之正则表达式验证URL
  7. Orcale安装完成后 em管理、性能无法登陆 报:没有找到主机
  8. 互斥体与互锁 <第五篇>
  9. C---通过指针访问数组
  10. html5之datalist标签
  11. C++实现的控制台-贪吃蛇
  12. springboot(十二):springboot如何测试打包部署
  13. android中xml tools属性详解(转)
  14. HTML5 新的 Input 类型
  15. 计时器setTimeout()
  16. jmeter读取csv文件
  17. Random类的常用方法
  18. Python基础教程学习笔记:第二章 列表和元组
  19. git工具的使用
  20. MySQL常用shell语句

热门文章

  1. S/4 HANA中的数据库锁策略
  2. 系列博文-Three.js入门指南(张雯莉)-照相机
  3. 『个人の笔记』百度ife
  4. TestNG exception
  5. Kafka元数据缓存(metadata cache)
  6. java编程思想-第13章-某些练习题
  7. 电梯调度二——曹玉松&&蔡迎盈
  8. python-----HTMLTestRunner报告生成注意点!
  9. PHP Array 简介
  10. jdk源码阅读笔记-AbstractStringBuilder