干 java 开发这么多年, 之前一直没留意 java 进程还区分守护进程和用户进程. 守护进程这个概念最早还是在 Linux 系统中接触的, 直到近期使用 java 开发心跳检测功能时, 使用 Timer 时才发现原来 java 也有守护线程的概念.
Java 线程
1.1 守护线程与用户线程
Java 线程分为守护线程 (DaemonThread) 和 用户线程(UserThread) 两类.
通常情况下, 我们使用 Thread 创建的线程在默认情况下都属于用户线程, 当在启动线程之前, 执行 thread.setDaemon(true)时, 线程会变成守护线程.
其实在本质上, 用户线程和守护线程并没有太大区别, 唯一的区别就是会影响虚拟机的退出(程序的终止). 当 jvm 中只剩下守护线程时, 虚拟机会退出, 及程序终止; 而当 jvm 中至少拥有一个用户线程时, jvm 都不会退出.
1.2 守护线程特点
Java 中的守护线程和 Linux 中的守护进程还是有些区别的, Linux 守护进程时系统级别的, 当系统退出时, 才会终止. 而 java 中的守护线程时 jvm 级别的, 当 jvm 中无任何用户进程时, 守护进程销毁, jvm 退出, 程序终止. 笔者认为 java 守护进程的最主要的特点有:
守护进程是运行在程序后台的线程
守护进程创建的进程, 依然时守护进程
守护进程不会影响 jvm 的退出, 当 jvm 只剩余守护进程时, jvm 进行退出
守护进行在 jvm 退出时, 自动销毁
在开发 java 守护线程时, 需要注意:
在线程启动之前, 及执行 thread.start() 方法前, 设置 thread.setDemon(true);
在守护线程中启动的子线程也是守护线程
守护线程不建议进行写操作, 因为守护进程随时可能结束.
干 java 开发这么多年, 之前一直没留意 java 进程还区分守护进程和用户进程. 守护进程这个概念最早还是在 Linux 系统中接触的, 直到近期使用 java 开发心跳检测功能时, 使用 Timer 时才发现原来 java 也有守护线程的概念.
Java 线程
1.1 守护线程与用户线程
Java 线程分为守护线程 (DaemonThread) 和 用户线程(UserThread) 两类.
通常情况下, 我们使用 Thread 创建的线程在默认情况下都属于用户线程, 当在启动线程之前, 执行 thread.setDaemon(true)时, 线程会变成守护线程.
其实在本质上, 用户线程和守护线程并没有太大区别, 唯一的区别就是会影响虚拟机的退出(程序的终止). 当 jvm 中只剩下守护线程时, 虚拟机会退出, 及程序终止; 而当 jvm 中至少拥有一个用户线程时, jvm 都不会退出.
1.2 守护线程特点
Java 中的守护线程和 Linux 中的守护进程还是有些区别的, Linux 守护进程时系统级别的, 当系统退出时, 才会终止. 而 java 中的守护线程时 jvm 级别的, 当 jvm 中无任何用户进程时, 守护进程销毁, jvm 退出, 程序终止. 笔者认为 java 守护进程的最主要的特点有:
守护进程是运行在程序后台的线程
守护进程创建的进程, 依然时守护进程
守护进程不会影响 jvm 的退出, 当 jvm 只剩余守护进程时, jvm 进行退出
守护进行在 jvm 退出时, 自动销毁
在开发 java 守护线程时, 需要注意:
在线程启动之前, 及执行 thread.start() 方法前, 设置 thread.setDemon(true);
在守护线程中启动的子线程也是守护线程
守护线程不建议进行写操作, 因为守护进程随时可能结束.
1.3 守护线程适用场景
针对于守护线程的特点, 笔者认为, java 守护线程通常可用于开发一些为其它用户线程服务的功能. 比如说心跳检测, 事件监听等. Java 中最有名的守护进程当属 GC(垃圾回收)
java 守护线程开发
开发守护进程时需要注意两点:
必须在线程启动之前, 即执行 thread.start()方法前, 执行 thread.setDaemon(true) 方法, 否则会抛出异常 IllegalThreadStateException
守护线程中创建的线程也是守护线程
资料分享:
以上是面试的经验以及学习的方面, 分享给大家, 希望对大家可以有帮助. 觉得有所收获的话可以关注小编, 加群: 714526711 获取小编整理出来的一些面试资料, 以及进阶架构视频文档.
精讲直播课程:
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
全面知识点:
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
丰富资料:
Java 面试官: 兄弟, 你确定 double 精度比 float 低吗?
来源: http://www.jianshu.com/p/23d38e746c3e