java程序退出时执行

java程序退出时执行

描述

对于程序退出前执行特定过程, C++中有析构方法,java中可以使用Runtime中的addShutdownHook(Thread hook) 向JVM注册一个关闭的线程事件,程序一旦结束 时,线程hook就会被执行,处理最后的事情。
程序结束是指程序删除线格式 自然结束或者System.exit(0)、System.exit(-1) 或者Runtime.getRuntime().exit(-1)、Runtime.getRuntime().exit(0)等。即使是程序异常退出,只要退出前addShutdownHook(t)已经注册过,程序退出事件依旧会被触发。

使用

public class Test {

    public static void main(String[] args) {

        new BeforeEnd();//放的位置决定是否会被触发
        try {
            //任务一:模拟数据导出
            System.out.println("数据正在导出...");
            Thread.sleep(5 * 1000);//模拟处理时间
            System.out.println("数据导出完成!!!");

        	//System.exit(0);//0和-1都会触发退出事件处理
        	//Runtime.getRuntime().exit(-1);//0和-1都会触发退出事件处理

            //任务二:打印报告
            System.out.println("开始打印报告...");
            Thread.sleep(5 * 1000);//模拟处理时间
            System.out.println("报告打印完成!!!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class BeforeEnd {//程序退出事件处理

    BeforeEnd() {
        //模拟处理时间
        Thread t = new Thread(() -> {
            try {
                //模拟正常终止前任务
                System.out.println("程序即将终止...");
                System.out.println("正在处理最后的事情...");
                Thread.sleep(5 * 1000);//模拟处理时间
                System.out.println("end...");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        Runtime.getRuntime().addShutdownHook(t);
    }
}

结果

结果:
数据正在导出...
数据导出完成!!!
开始打印报告...
报告打印完成!!!
程序即将终止...
正在处理最后的事情...
end...

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值