Java中Runtime.getRuntime().addShutdownHook()方法

来源:互联网 发布:js对象循环引用 编辑:程序博客网 时间:2024/05/16 14:37

今天在阅读Tomcat源码的时候,catalina这个类中使用了下边的代码,不是很了解,所以google了一下,然后测试下方法,Tomcat中的相关代码如下:

      Runtime.getRuntime().addShutdownHook(shutdownHook);

   这个方法的含义说明:

       这个方法的意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。

 

一、编写个测试类

  package com.test.hook;

public class TestShutdownHook {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // 定义线程1
  Thread thread1 = new Thread() {
   public void run() {
    System.out.println("thread1...");
   }
  };

  // 定义线程2
  Thread thread2 = new Thread() {
   public void run() {
    System.out.println("thread2...");
   }
  };

  // 定义关闭线程
  Thread shutdownThread = new Thread() {
   public void run() {
    System.out.println("shutdownThread...");
   }
  };

  // jvm关闭的时候先执行该线程钩子
  Runtime.getRuntime().addShutdownHook(shutdownThread);

  thread1.start();
  thread2.start();
 }
}

 

打印结果:

thread2...
thread1...
shutdownThread...

 

或者:

thread2...
thread1...
shutdownThread...

 

结论:

 

无论是先打印thread1还是thread2,shutdownThread 线程都是最后执行的(因为这个线程是在jvm执行关闭前才会执行)。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq安全中心密保手机换了怎么办 微信冻结账号绑定了银行卡怎么办 扣扣红包密码是支付密码忘了怎么办 红包退回通知不小心删除了怎么办 QQ炫舞金币充错账号怎么办 晋江的小说用晋江币买不了是怎么办 中国银行储蓄不能充值支付宝怎么办 微信怎么改银行卡密码忘记了怎么办 微信号手机号码换了密码忘了怎么办 微信被盗密码被改绑定手机号怎么办 微信qq号登陆改密码忘记了怎么办 本人微信红包赌博输了50万怎么办 4g飞享套餐话费用完了怎么办 手机丢了查话费欠了几百块怎么办 注销电信手机卡里面的余额怎么办 联通手机卡注销后里面的余额怎么办 手机卡网上销户以后剩余话费怎么办 联通新号注册微信发不了短信怎么办 韩博士装机卡在驱动恢复怎么办 xp打印后程序服务没有运行怎么办 刚注册的微信显示异常怎么办 不小心删了照片怎么办不要钱 qq邀请好友辅助验证成功后怎么办 微信申诉怎么让好友发验证码怎么办 微信申诉好友都删除了怎么办 恋与制作人原来的帐号不见了怎么办 手机号被别人注册了手机银行怎么办 想上老婆的陌陌号但要验证码怎么办 中国家医居民端注册信息有误怎么办 别人给我充的q币怎么办 qq忘记密码手机号码也换了怎么办 手机号码不用了微信忘记密码怎么办 手机号码注销了微信忘记密码怎么办 微信忘记密码手机号码也换了怎么办 微信钱包里的钱莫名少了怎么办 被骗给人冲q币了怎么办 支付宝账户异常无法领取红包怎么办 微信q币支付错了怎么办 王者荣耀不小心把点卷用了怎么办 微信绑定的qq号密码忘记了怎么办 微信红包实名认证没银行卡怎么办