【多线程】守护线程 Daemon
守护线程 Daemon
- 线程分为用户线程和守护线程
- 虚拟机必须确保用户线程执行完毕
- 虚拟机不用等待守护线程执行完毕
- 如,后台记录操作日志,监控内存,垃圾回收等待..
代码示例:
/** * @Description 测试守护线程,上帝保佑着你 * @Author hzx * @Date 2022-03-27 */ public class TestDaemon { public static void main(String[] args) { TestGod god = new TestGod(); TestYou you = new TestYou(); Thread thread = new Thread(god); thread.setDaemon(true); //默认是false,表示是用户线程,正常的线程都是用户线程... thread.start(); //守护线程启动 new Thread(you).start(); //你,用户线程启动 } } class TestGod implements Runnable { @Override public void run() { while (true) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("上帝保佑着你"); } } } class TestYou implements Runnable { @Override public void run() { for (int i = 0; i < 10; i++) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("你开心的活了"+i+"个纪元"); } System.out.println("===========Goodbye!World!==========="); } }
执行结果:
上帝保佑着你 你开心的活了0个纪元 上帝保佑着你 你开心的活了1个纪元 上帝保佑着你 你开心的活了2个纪元 上帝保佑着你 你开心的活了3个纪元 上帝保佑着你 你开心的活了4个纪元 你开心的活了5个纪元 上帝保佑着你 你开心的活了6个纪元 上帝保佑着你 上帝保佑着你 你开心的活了7个纪元 上帝保佑着你 你开心的活了8个纪元 你开心的活了9个纪元 ===========Goodbye!World!=========== 上帝保佑着你
- 一个守护线程什么时候结束不取决于主线程什么时候结束。守护线程的作用是在后台运行任务,只要还有一个以上非守护线程没有结束(即便此时主线程已结束),程序就不会结束。
- 反过来,当所有非守护线程都结束了后,即便还有未结束的守护线程,系统也会马上结束这些守护线程,然后结束程序。
思考问题:当非守护线程执行结束的时候,为什么守护线程还会再接着执行一会儿再结束?
解释:单一线程当然是主程序语句结束,主程序结束,多线程是并行状态,主线程语句执行结束,其他线程执行时间可能大于主线程执行时间,所以主线程并没有关闭,等其他线程结束的收尾工作,结束线程也需要时间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南