Java 钩子函数编程技巧
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)
推荐:《Java常用技术和书籍推荐》
如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
如果,您希望更容易地发现我的新博客,不妨关注一下。因为,我的写作热情也离不开您的肯定支持。
感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客。
本文版权归博客园-冬眠的山谷(https://www.cnblogs.com/lgjlife/)所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出。