守护线程和用户线程的区别是什么呢?
下文笔者讲述守护线程和用户线程的区别说明,如下所示
守护线程和用户线程的简介
用户(User)线程:
运行在前台
执行具体的任务
如:
程序的主线程、连接网络的子线程等都是用户线程
守护(Daemon)线程:
运行在后台,为其他前台线程服务
如:守护线程是JVM中非守护线程的 “佣人”
一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作
守护线程和用户线程示例
main 函数所在的线程就是一个用户线程
main 函数启动时,同时JVM内部还启动了很多守护线程
如:
垃圾回收线程
守护线程和用户线程的区别
区别1:
用户线程结束,JVM 退出
此时无论有没有守护线程运行
守护线程都不会影响JVM退出
守护线程和用户线程注意事项
一、setDaemon(true)必须在start()方法前执行
否则会抛出 IllegalThreadStateException 异常
二、在守护线程中产生的新线程也是守护线程
三、不是所有的任务都可以分配给守护线程来执行,如:读写操作或计算逻辑
四、守护(Daemon)线程中不能依靠finally块来确保执行关闭或清理资源的逻辑
因为一旦所有用户线程都结束运行
守护线程会随JVM一起结束工作
所以守护(Daemon)线程中finally语句块可能无法被运行
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


