守护线程(Daemon)、钩子线程(Hook)简述

本文详细介绍了Java中的守护线程和钩子线程。通过代码示例展示了守护线程如何在主线程结束后自动结束,以及如何设置线程钩子在JVM正常退出时触发。分析了守护线程伴随主线程结束后的JVM退出流程,并讨论了取消守护线程设置后对程序运行的影响。
摘要由CSDN通过智能技术生成

1. 简述


守护线程


守护线程在主线程退出时候会随主线程一起结束,而不会阻塞主线程的退出

钩子线程


钩子线程可以在*JVM正常退出*的时候自动触发

2. 代码演示

    public static void main(String[] args) throws InterruptedException {

        // 线程钩子线程 在JVM正常退出时候触发,kill -9 等强制删除除外
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("【线程hook】线程结束Hook");
        }));


        // 守护线程,主线程执行完毕后,直接跟随结束
        Thread thread = new Thread(() -> {
            try {
                while (true) {
                    System.out.println("守护线程支持执行");
                    TimeUnit.MILLISECONDS.sleep(500);
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        // 设置为守护线程
        thread.setDaemon(true);
        thread.start();

        TimeUnit.SECONDS.sleep(2);

    }

3. 执行结果

3.1 设置为守护线程后,2秒后守护线程随着主线程结束关闭

执行结果如下:

守护线程支持执行
守护线程支持执行
守护线程支持执行
守护线程支持执行
【线程hook】线程结束Hook

3.2 将守护线程设置去除后,子线程会阻止主线程关闭

 

4. 结果分析

4.1 守护线程

守护线程执行中,随着Main线程执行结束,守护线程退出;

守护线程伴随Main线程结束后,JVM退出;

JVM退出触发Hook线程;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值