
这是一个或许对你有用的社群 一对一交流/面试小册/简历优化/求职解惑欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料《项目实战视频》从书中学往事中“练”《互联网高频面试题》面朝简历学习春暖花开《架构 x 系统设计》摧枯拉朽掌控面试高频场景题《精进 Java 学习指南》系统学习互联网主流技术栈《必读 Java 源码专栏》知其然知其所以然这是一个或许对你有用的开源项目国产Star破10w的开源项目前端包括管理后台、微信小程序后端支持单体、微服务架构RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能多模块https://gitee.com/zhijiantianya/ruoyi-vue-pro微服务https://gitee.com/zhijiantianya/yudao-cloud视频教程https://doc.iocoder.cn【国内首批】支持 JDK17/21SpringBoot3、JDK8/11Spring Boot2双版本这道题面试官真正想筛什么L130 秒答案过基础线L22 分钟答案显原理L35 分钟答案显工程经验直接掉分的几种答法高频追问怎么接一句话收口这道题面试官真正想筛什么「守护线程是什么 / 和普通线程的区别」——是 JUC 面试的入门题但能答到加分位的不到 30%。题面考概念实际在筛三件事你清不清楚 JVM 退出的判断条件不是main走完是所有非守护线程结束你有没有用守护线程的实际经验GC、心跳、监控这些常见场景你有没有踩过守护线程的坑finally不保证、子线程继承——这是高分位。候选人按答到的深度分三档30 分背定义、60 分讲清 JVM 退出机制、90 分讲三个坑 ShutdownHook 优雅退出。下面按段位拆。基于 Spring Boot MyBatis Plus Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/ruoyi-vue-pro视频教程https://doc.iocoder.cn/video/L130 秒答案过基础线守护线程Daemon Thread是「后台服务线程」。核心区别所有普通非守护线程都结束后JVM 直接退出不管守护线程跑到哪一步。维度守护线程普通线程JVM 退出不阻止被强制销毁阻止必须全部结束默认类型否要手动setDaemon(true)所有线程默认是设置时机必须在start()之前不需要——这是基础线30 分。能背但不能加分。面试官听完通常会接「那 JVM 是怎么判断要不要退出的」——这就进入 L2 战场。基于 Spring Cloud Alibaba Gateway Nacos RocketMQ Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/yudao-cloud视频教程https://doc.iocoder.cn/video/L22 分钟答案显原理L2 的关键是讲清 JVM 退出机制 举出经典案例。JVM 退出的唯一判断所有非守护线程都执行完毕。注意三个常见误解不是System.exit()触发——那是显式退出不是main线程结束触发——main 结束后如果还有用户线程在跑比如 Spring 容器没关JVM 不退出不看守护线程是否完成——它们和 JVM 一起销毁。最经典的守护线程是 GC 线程——后台默默回收所有用户线程结束了GC 也没必要继续跟 JVM 一起被销毁。类比一句话饭店打烊。客人普通线程全走了服务员守护线程不管手头在干什么关门下班。能讲清这层逻辑60 分。关键深一层的洞察守护线程不是低级线程它是表达这个任务是否值得拖住整个 JVM的语义工具。GC、心跳、监控这种主流程结束就该停的事情才适合业务关键路径绝对不要碰。L35 分钟答案显工程经验L3 加分位的核心讲清三个坑 给出生产里的优雅退出方案。坑一finally 不保证执行Thread t new Thread(() - { try { Thread.sleep(5000); } finally { System.out.println(资源清理); // 可能不执行 } }); t.setDaemon(true); t.start();JVM 退出时守护线程被强制销毁finally 块来不及跑。结论守护线程别做资源释放、数据写入等关键操作——半拉子状态的代价比没做还大。坑二不适合 IO 操作写一半文件 JVM 就退了——文件损坏、网络连接半开、消息半发全是这种半拉子状态。所有涉及外部状态的任务都别用守护线程。坑三子线程默认继承父线程的守护属性Thread daemon new Thread(() - { Thread child new Thread(...); // 默认也是守护线程 child.start(); }); daemon.setDaemon(true); daemon.start();这个最阴——你以为new Thread()是个普通业务线程结果它继承了父线程的守护属性跟着父亲一起被强杀。生产里碰到这个坑排查方向极不直观——业务线程为什么没跑完就消失了答因为它的爸爸是守护线程。要避免在守护线程里new子线程时显式setDaemon(false)。生产里的优雅退出方案ShutdownHook需要在 JVM 退出前确保某些清理动作完成用 ShutdownHook不要赌守护线程的 finallyRuntime.getRuntime().addShutdownHook(new Thread(() - { log.info(应用正在关闭执行清理...); // 关线程池、刷缓冲区、保存状态、断 DB 连接 }));ShutdownHook 是 JVM 退出前回调的普通线程——只要 JVM 是正常退出main 结束、System.exit()、收到 SIGTERM 等可控关闭ShutdownHook 都会被执行但Runtime.halt()、SIGKILL、OOM-Killer、宿主机断电、JVM 崩溃这些硬关场景一样救不回来。所以 ShutdownHook 是比守护线程finally强一个量级的兜底——但它不是绝对保险。真正可靠的资源一致性还得靠业务层的设计幂等、补偿、对账、WAL 等。为什么这部分最容易拉开分数讲完三个坑 ShutdownHook 的候选人面试官心里已经在打 90 分以上——因为这意味着你不是看了一篇博客背概念是真在生产里被这些坑教育过。直接掉分的几种答法「优先级低的线程」——优先级和守护是两回事守护和优先级完全无关。「会被中断的线程」——不是被中断是 JVM 退出时被强制销毁。「一定不阻塞主线程的线程」——守护线程也能阻塞、也能耗 CPU只是不阻止 JVM 退出。「Spring Scheduled 用的就是守护线程」——错。Scheduled默认普通线程所以应用不优雅关闭它会一直跑。「main 是守护线程」——错。main 是普通线程是顶级用户线程。高频追问怎么接追问 1main 线程是守护线程吗答不是。main 是普通线程。只要 main 还在跑或者 main 启动的其他普通线程还在跑JVM 就不退出。追问 2守护线程的 finally 一定不执行吗答不一定。如果守护线程是自己正常跑完比如 run() 方法返回finally 执行如果是JVM 退出导致守护线程被强杀finally不保证执行——这是关键区别。追问 3Spring Boot 应用怎么处理优雅关闭答Spring Boot 内置WebServerGracefulShutdown配置server: shutdown: graceful spring: lifecycle: timeout-per-shutdown-phase: 30s底层走的是 ShutdownHook 机制——容器关闭时先停止接收新请求等待已有请求处理完再关闭线程池、断连接、退出 JVM。追问 4线程池里的线程是守护吗答默认不是。Executors.newFixedThreadPool创建的是普通线程——所以不显式shutdown()线程池JVM 永远退不了。这是经典面试坑ExecutorService pool Executors.newFixedThreadPool(10); pool.submit(...); // main 结束但 JVM 不退出——因为线程池里 10 个普通线程还活着 // 必须显式 pool.shutdown() 才能正常退出要改成守护线程得用自定义ThreadFactoryThreadFactory factory r - { Thread t new Thread(r); t.setDaemon(true); return t; }; ExecutorService pool Executors.newCachedThreadPool(factory);追问 5守护线程能新建普通线程吗答能但需要显式setDaemon(false)——默认会继承父线程的守护属性。这是坑三。一句话收口守护线程是给普通线程当配角的——主角全走了配角直接散场。适合做 GC、心跳、监控这种可有可无的后台事绝不要碰 IO、资源释放、数据持久化——finally不保证执行。需要兜底就用ShutdownHook不要赌守护线程能跑完。这题答到 30 分容易背定义答到 90 分靠三个坑 ShutdownHook 线程池默认是普通线程这个常见陷阱。欢迎加入我的知识星球全面提升技术能力。 加入方式“长按”或“扫描”下方二维码噢星球的内容包括项目实战、面试招聘、源码解析、学习路线。文章有帮助的话在看转发吧。 谢谢支持哟 (*^__^*