博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RunTime.getRunTime().addShutdownHook用法
阅读量:7014 次
发布时间:2019-06-28

本文共 1024 字,大约阅读时间需要 3 分钟。

  hot3.png

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

      Runtime.getRuntime().addShutdownHook(shutdownHook);

   这个方法的含义说明:

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

 

一、编写个测试类

  package com.test.hook;

public class TestShutdownHook {

 /**

  * 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执行关闭前才会执行)。

转载于:https://my.oschina.net/sbcagf/blog/783058

你可能感兴趣的文章
走向5G:爱立信携手新加坡电信为物联网部署4G LTE网络
查看>>
DBA必备技能:通过truss跟踪解决监听无法启动案例
查看>>
GNOME 基金会签署用户数据宣言 2.0
查看>>
《产品设计与开发(原书第5版)》——3.4 步骤1:确立章程
查看>>
《Adobe Illustrator CS6中文版经典教程(彩色版)》—第1课1.5节探索“控制面板”...
查看>>
MySQL 问题分析:ERROR 1071 : Specified key was too long;max
查看>>
我的友情链接
查看>>
nginx tcp代理
查看>>
Linux日志分析常用命令-备忘
查看>>
sybase笔记 3712错误
查看>>
Zabbix 监控windows服务器监控闪断zabbix_get [12577]: Timeout while executing operatio
查看>>
MicrosoftRemoteDesktop Mac版
查看>>
EXCEL拼sql语句
查看>>
分析称明年第二季度平板出货量超PC
查看>>
Device eth0 has different MAC address than expected, ign
查看>>
DXP,AD不用新建PCB完美解决 Unknown Pin 和Failed to add class member 问题
查看>>
web.xml <context-param>只能放一对<param-name>和<param-value>
查看>>
html测验 --(w3cshool)
查看>>
XP对Win7说:哥们,你的U盘我打不开啊
查看>>
不得不知的Linux服务器性能调优技巧
查看>>