image

编辑人: 未来可期

calendar2025-01-03

message0

visits828

说说你了解的守护线程

分析&回答

什么是守护线程?

  • 守护线程是指在程序运行的时候在后台提供一种通用服务的线程,并且这个线程并不属于程序中不可或缺的部分。守护线程不阻止 Java 虚拟机 ( JVM ) 退出的线程。当所有非守护线程终止时,JVM 会放弃所有剩余的守护线程。
  • 守护线程通常用于为其他线程执行一些支持或服务任务,但我们应该考虑到它们可能随时被放弃。
  • 要将一个线程作为守护线程启动,应该在调用 start() 之前使用 setDaemon()方法设置为守护线程。如下所示
Thread daemon = new Thread(() -> System.out.println("Hello from daemon!")); 
daemon.setDaemon(true); daemon.start();

反思&扩展

  • setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行
  • 守护线程创建的线程也是守护线程
  • 守护线程不应该访问、写入持久化资源,如文件、数据库,因为它会在任何时间被停止,导致资源未释放、数据写入中断等问题
  • 后台进程在不执行finally子句的情况下就会终止其run()方法。
  • JVM 中的垃圾回收线程就是典型的守护线程

喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

创作类型:
原创

本文链接:说说你了解的守护线程

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share