美文网首页Java 杂谈Java程序员
当java面试官问你用户线程和守护线程的区别千万别回答错了

当java面试官问你用户线程和守护线程的区别千万别回答错了

作者: 48730ba83b2d | 来源:发表于2019-04-04 17:01 被阅读33次

    干java 开发这么多年, 之前一直没留意java 进程还区分守护进程和用户进程。守护进程这个概念最早还是在linux系统中接触的,直到近期使用java开发心跳检测功能时,使用Timer时才发现原来java也有守护线程的概念。

    1. 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也有守护线程的概念。

    1. 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(垃圾回收)

    1. 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低吗?

    相关文章

      网友评论

        本文标题:当java面试官问你用户线程和守护线程的区别千万别回答错了

        本文链接:https://www.haomeiwen.com/subject/uosqiqtx.html