读书人

Java中的Daemon线程-照护线程

发布时间: 2013-10-08 17:12:09 作者: rapoo

Java中的Daemon线程--守护线程
守护线程

学习的过程中偶然发现Java中居然也有守护线程这东西,感觉十分好奇,网上查阅一些资料做一些整理

加深自己的记忆,同时也方便日后的再学习。好记性不如烂博客!

JVM中存在两种线程:用户线程和守护线程。

所谓的守护线程,是指用户程序在运行的时候后台提供的一种通用服务的线程,比如用于垃圾回收的

垃圾回收线程。这类线程并不是用户线程不可或缺的部分,只是用于提供服务的"服务线程"。

基于这个特点,当虚拟机中的用户线程全部退出运行时,守护线程没有服务的对象后,JVM也就退出了。

这点JDK源码中的介绍已经说明这一点了。

若想更加直观的看到该情况,可以使用JDK自带的工具jvisualvm.exe(bin目录下)查看,下图

是笔者的查看情况

Java中的Daemon线程-照护线程

也可以使用命令行下的jstack命令:

Java中的Daemon线程-照护线程

Java中的Daemon线程-照护线程

该命令下可以看出有哪些守护线程,哪些用户线程了。

说完了守护线程如何产生和特点,下面简要的谈谈使用守护线程应该注意的地方。

1、thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个异常。你不能把正在运行

的常规线程设置为守护线程。

2、在守护线程中产生的线程也是守护线程。(这点读者可结合工具自己验证)

3、我们自己产生的守护线程应该避免访问一些类似于文件、数据库等固有资源,因为由于JVM没有用户

线程之后,守护线程会马上终止。

总结就到这个地方,笔者从没使用过java中的Daemon线程,上述总结也参照了一些网上的资源加之自己的

理解,不当之处希望指出。


By Kiritor


读书人网 >编程

热点推荐