一看就会系列之ShutdownHook入门

一、ShutdownHook的用途

           在很多实际应用环境中,当用户关闭了应该用程序时,需要做一些善后清理工作,但实际上程序很可能并不是按照设想中那样正常的关闭,导致清理工作不起作用,这时ShutdownHook就派上了用场。

          jvm会在以下退出情况下调用ShutdownHook事件:

  • 最后一个非守护进程线程退出或调用exit(相当于system.exit)方法时,程序正常退出
  • 虚拟机因响应用户中断(如键入ctrl + c)或系统范围的事件(如用户注销或系统关闭)而终止。

二、代码实现

定义一个ShutdownHook

ShutdownHook.java

package com.zhuyun.hook;

public class ShutdownHook extends Thread{

	@Override
	public void run() {
		System.out.println("项目关闭啦");
	}
}

测试代码ShutdownHookDemo.java

package com.zhuyun.hook;

import java.io.IOException;

public class ShutdownHookDemo {
	
	public static void main(String[] args) {
		System.out.println("项目启动了");
		ShutdownHook shutdownHook = new ShutdownHook();
                //注册一个ShutdownHook 
		Runtime.getRuntime().addShutdownHook(shutdownHook);
		
		try {
			System.in.read();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

三、测试结果

第一种情况:正常退出

 

第二种情况:System.exit(0)方法退出

在代码中,将System.in.read()改成System.exit(0),执行结果如下:

 

第三种情况:ctrl + c 退出

将System.exit(0)再改回成System.in.read(),然后在程序阻塞的时候键入ctrl + c,结果如下:

 

第四种情况:kill掉进程

 

从上述结果可以看出,第四种情况不会触发ShutdownHook事件,其他三种情况都可以触发。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值