Java面试八股之守护线程和普通线程的区别

  1. 守护线程和普通线程的区别

生命周期差异:

普通线程(也称为用户线程):这类线程的生命周期与程序的生命周期独立。它们会一直运行直到完成自己的任务或主动结束,如果一个程序中只剩下普通线程在运行,即使主线程结束,JVM也会继续运行直到这些线程也自然结束。

守护线程(Daemon Thread):守护线程的存在是为了服务于用户线程,它们并不执行程序的主要任务。当所有非守护线程(即用户线程)结束时,无论守护线程是否还在执行任务,JVM都会自动退出,因此守护线程会随之终止。守护线程常用于执行后台支持任务,如垃圾回收。

创建方式:

普通线程是默认创建的线程类型,当你通过new Thread()创建一个线程时,它默认就是普通线程。

要将一个线程设置为守护线程,需要在调用start()方法启动线程之前,使用setDaemon(true)方法。需要注意的是,一旦线程开始运行,就不能改变其守护状态。

优先级和资源访问:

守护线程通常具有较低的优先级,意味着在资源竞争时可能让位于用户线程。

虽然没有硬性规定,但通常建议不要在守护线程中执行涉及长时间独占资源(如文件I/O、数据库操作)的操作,因为守护线程可能在任何时刻被中断,导致资源无法正确释放。

应用场景:

普通线程通常用于执行应用程序的核心逻辑,如处理用户请求、计算任务等。

守护线程则适合执行辅助性、后台性的任务,如日志记录、监控、清理资源等,这些任务不需要阻止程序的终止。

如果大家需要视频版本的讲解,欢迎关注我的B站:

相关推荐
小江的记录本3 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
小江的记录本5 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
ID_1800790547310 小时前
小红书评论 API 接口详解与实战开发
java·jvm·c++
東雪木11 小时前
JVM 与 Java 内存模型 专属复习笔记
java·jvm·笔记·java面试
Undergoer_TW15 小时前
Colmap 进军嵌入式:SQLite 数据库从崩溃退出到自动治愈
jvm·数据库·sqlite
骄马之死15 小时前
ThreadLocal 核心原理
java·jvm·算法
一只小白00015 小时前
【JVM | 第二篇】—— 类加载器 & 双亲委派模型
jvm
Nyarlathotep011316 小时前
自动内存管理(3):HotSpot中垃圾收集的实现
jvm·后端
仍然.16 小时前
浅谈JVM
jvm