zoukankan      html  css  js  c++  java
  • JAVA 虚拟机钩子

    Shutdown Hook

    Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。

    JDK提供了Java.Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在一下几种场景中被调用:

    1. 程序正常退出
    2. 使用System.exit()
    3. 终端使用Ctrl+C触发的中断
    4. 系统关闭
    5. OutOfMemory宕机
    6. 使用Kill pid命令干掉进程(注:在使用kill -9 pid时,是不会被调用的)

    下面是JDK1.7中关于钩子的定义:

        public void addShutdownHook(Thread hook)
    参数:
        hook - An initialized but unstarted Thread object 
    抛出: 
        IllegalArgumentException - If the specified hook has already been registered, or if it can be determined that the hook is already running or has already been run 
        IllegalStateException - If the virtual machine is already in the process of shutting down 
        SecurityException - If a security manager is present and it denies RuntimePermission("shutdownHooks")
    从以下版本开始: 
        1.3
    另请参见:
        removeShutdownHook(java.lang.Thread), halt(int), exit(int)

    来测试第一种,程序正常退出的情况:

    import java.util.concurrent.TimeUnit;  
     
    public class HookTest  
    {  
        public void start()  
        {  
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {  
                @Override 
                public void run()  
                {  
                    System.out.println("Execute Hook.....");  
                }  
            }));  
        }  
     
        public static void main(String[] args)  
        {  
            new HookTest().start();  
            System.out.println("The Application is doing something");  
     
            try 
            {  
                TimeUnit.MILLISECONDS.sleep(5000);  
            }  
            catch (InterruptedException e)  
            {  
                e.printStackTrace();  
            }  
        }  
    }

    运行结果:

    The Application is doing something  

    Execute Hook.....

  • 相关阅读:
    docker安装&镜像加速
    CentOS安装python3
    Elasticsearch相关下载地址
    fiddler抓包手机和小程序
    locust简单入门演示(一)——任务等待机制
    win10下载openssl
    XGBoost参数调优完全指南(转)
    HIVE学习
    windows定期清理指定目录文件(保留指定天数日志)
    RedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/6238738.html
Copyright © 2011-2022 走看看