Java守护线程简介
2017-05-12 13:25
162 查看
在没有去了解Java守护线程是什么之前,大家是怎么猜测它的?反正我是这样以为的:
Java守护线程应该是一直运行在后台的后台线程。
结果发现我太天真了,今天简单介绍一下Java的守护线程。
用户线程(非守护线程);
守护线程
在JVM中,守护线程(Deamon线程)的优先级是很低的,低于用户线程,他们的作用就是服务于用户线程(非守护线程,以后都称用户线程)。你可以把守护线程比喻为服务员,用户线程比喻为顾客,服务员都是围绕顾客存在的,所以如果JVM中所有的用户线程都停止了的话,守护线程也就没有可以服务的线程了,自然就没有存在的价值了,这时JVM将会退出。
只要JVM中存在至少一个用户线程,JVM就不会退出。
在Java中,可以使用如下的方式设置一个线程为守护线程:
有几点需要注意:
如果要设置一个线程为守护线程,必须在线程启动之前设置,如果线程已经启动了再设置该选项,将会报异常;
守护线程中新产生的线程也是守护线程;
一些必须要有结果的任务(比如写文件,计算数据)不应该分配个守护线程执行,因为它可能在某个时刻就随JVM一同退出了。
Java守护线程应该是一直运行在后台的后台线程。
结果发现我太天真了,今天简单介绍一下Java的守护线程。
Java守护线程
Java中的线程分为两类:用户线程(非守护线程);
守护线程
在JVM中,守护线程(Deamon线程)的优先级是很低的,低于用户线程,他们的作用就是服务于用户线程(非守护线程,以后都称用户线程)。你可以把守护线程比喻为服务员,用户线程比喻为顾客,服务员都是围绕顾客存在的,所以如果JVM中所有的用户线程都停止了的话,守护线程也就没有可以服务的线程了,自然就没有存在的价值了,这时JVM将会退出。
只要JVM中存在至少一个用户线程,JVM就不会退出。
在Java中,可以使用如下的方式设置一个线程为守护线程:
Thread.setDeamon(true);
setDeamon是线程类中的函数,使用这个函数可以将一个线程设置为守护线程,默认值为false。
有几点需要注意:
如果要设置一个线程为守护线程,必须在线程启动之前设置,如果线程已经启动了再设置该选项,将会报异常;
守护线程中新产生的线程也是守护线程;
一些必须要有结果的任务(比如写文件,计算数据)不应该分配个守护线程执行,因为它可能在某个时刻就随JVM一同退出了。
典型的守护线程
Java中的垃圾回收线程是一个典型的守护线程,它为其他用户线程回收垃圾而存在,假如用户线程全部都退出了,也就不会产生垃圾了,它也就没有必要存在了,这时JVM将退出,随之垃圾回收线程也就退出了。相关文章推荐
- [Java] DaemonThread(守护线程)简介---finally内的代码不一定会被执行
- Java中的守护线程 & 非守护线程(简介)
- Java中的守护线程 & 非守护线程(简介)
- Java中的守护线程 & 非守护线程(简介)
- Java中的守护线程 & 非守护线程(简介)
- Java线程学习之线程简介
- Java中的守护线程 & 非守护线程
- Java 守护线程(Daemon)
- java守护线程
- Java线程简介--进阶学习
- 初学Java多线程:线程简介
- Java线程:线程的调度-守护线程
- java线程简介(线程的生命)
- Java线程之守护线程(Daemon)收藏
- Java多线程初学者指南(1):线程简介
- Java 守护线程
- java 守护线程运行示例
- java 守护线程(Daemon)
- Java线程之守护线程(Daemon)
- Java线程:线程的调度-守护线程