Java 性能守护线程和 JVM 的优雅关闭

一、JVM中的关闭

1. 详解虚拟机钩子

在Java进程开发中,对于重量级的系统资源关闭或者进程资源整理或信号输出,常常会通过Java内置的addShutdownHook方法注册回调函数,确保在Java进程关闭不再使用这些资源时将其释放,例如hutool这个工具类对应连接池的管理工具GlobalDSFactory,其底层就会在类加载初始化时利用addShutdownHook注册一个连接池销毁的回调函数:

/*
  * 设置在JVM关闭时关闭所有数据库连接
  */
 static {
  // JVM关闭时关闭所有连接池
  Runtime.getRuntime().addShutdownHook(new Thread() {
   @Override
   public void run() {
    if (null != factory) {
     factory.destroy();
     StaticLog.debug("DataSource: [{}] destroyed.", factory.dataSourceName);
     factory = null;
    }
   }
  });
 }

    而虚拟机钩子注册的原理本质上就是在调用addShutdownHook时,其底层将这个现场hook注册到一个hooks的map容器中,并在shutdown的时候遍历调用这些hook线程:

    对应

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    奔向理想的星辰大海

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值