• 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)
  • 相关阅读:
    CentOS7安装iptables防火墙
    Linux下ntpdate时间同步
    linux下的时间及时区设置
    linux下的DNS
    sysctl
    ab -n -c
    VIM 中 查看{}是否闭合,按%跳转到下个闭合
    要删除共享的初始登陆名 cmd下输入net use * /delete
    case in esac ` for in do done ` while true / false
    read op case $op in
  • 原文地址:https://www.cnblogs.com/lgjlife/p/10669660.html
Copyright © 2020-2023  润新知