前言
按照线程特性分类:
1、User Thread(用户线程)
2、Daemon Thread(守护线程)
平常我们创建最多的是用户线程,我没有在实际项目中手动创建过守护线程(除了练习),接下来一起学习守护线程的生命周期,以及守护线程作用,与用户线程之间的区别等等知识点
守护线程简介
中文名:守护线程
中文别称:服务线程
其他称谓:后台线程
英文名:Daemon Thread
线程优先级:低,意味着CPU时间将更多的给予用户线程
守护线程生命周期
Java虚拟机天生是多线程程序,Java虚拟机创建时,会创建数个守护线程运行,这些守护线程中,最直观的是GC线程,它们默默的在后台执行垃圾对象的回收工作。
守护线程创建后,什么时候销毁呢?Java虚拟机中运行着用户线程,则守护线程一直会处于存活状态,并一直在工作。反之,当所有用户线程都运行结束,守护线程则会随着JVM进程的结束而被销毁!(Java虚拟机不会等待守护线程)
创建守护线程
Thread thread = new Thread();
thread.setDeamon(true);
Thread的setDeamon()方法即可设置为一个守护线程
守护线程的注意事项
1、无法在线程运行时,变更为守护线程
thread.setDaemon(true)方法必须在thread.start()之前调用,否则会抛出一个IllegalThreadStateException异常对象
2、守护线程作为父线程产生的子线程也是守护线程
3、守护线程不会一直存活,当JVM中没有用户线程运行时,所有的守护线程会被JVM强制终止
用户线程与守护线程区别
1、JVM的等待态度
JVM会等待所有的用户线程完成工作,所有用户线程完成工作前,JVM是不会退出的!
JVM不会等待守护线程,当所有用户线程完成工作后,会强制终止所有的守护线程,然后JVM立即退出
2、创建方式
用户线程由我们的代码创建……
守护线程由JVM创建……(虽然我们也可以手动创建守护线程)
3、任务侧重点
用户线程用来设计并完成一些特定任务
守护线程主要用来支持用户线程
4、前台与后台
用户线程是前台线程
守护线程是后台线程
5、线程优先级
用户线程是高优先级线程
守护线程是低优先级线程
6、生命周期依赖
用户线程的生命周期完全独立,不依赖于其他线程
守护线程的生命周期依赖于用户线程