Java 钩子函数编程技巧

Posted lgjlife

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 钩子函数编程技巧的主要内容,如果未能解决你的问题,请参考以下文章

windows api 钩子函数

函数式编程

--hook,某电商(bao)app签名实现数据采集,欢迎交流

《On Java 8》中文版 第十三章 函数式编程

Web Spider Fiddler - JS Hook 基本使用

Java实现类的重载及使用垃圾回收钩子函数