• 关于JAVA的守护进程


    Java有两种线程:守护线程(Daemon Thread)与 用户线程(User Thread) 
    任何Java线程都可以是守护线程(Daemon Thread)或者 用户线程(User Thread)

    守护线程(Daemon Thread)

    是为运行在相同的进程中的其它线程(User Thread)提供服务的,是一种“在后台提供通用性支持”的线程,它并不属于程序本体,比如垃圾回收线程就是一个很称职的守护者。

    用户线程(User Thread)

    就是我们通常谈论到的线程

    如何区别它们

    它们唯一的区别是判断虚拟机何时离开: 
    用户线程(User Thread):Java虚拟机在它所有非守护线程已经离开后自动离开。 
    守护线程(Daemon Thread):守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。

    当线程只剩下守护线程的时候,JVM就会退出.但是如果还有其他的任意一个用户线程还在,JVM就不会退出。

    setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。

    需要注意的

    #### 1. 在守护线程中产生的新线程也是守护线程 #### 2. 不是所有的应用都可以交给守护线程(Daemon Thread) 
    因为所有的用户线程都离开时,JVM就该退出了,前面我也说过,当没有用户线程时,守护线程也该退出了,如果此时交给守护线程的任务(读写操作或者计算逻辑)没有完成,将造成严重的灾难。

  • 相关阅读:
    微信公众号开发(一)——环境搭建
    Spring中@Async-异步处理
    SSL/TLS安全评估-查看访问的网址支持哪些协议等
    SSL异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    Java代码自动部署
    SQL优化技巧
    idea2019.2 svn 忽略文件问题
    Remote System Explorer Operation在eclipse后台一直跑 解决办法
    JPA project Change Event Handler问题解决
    MySQL按首字母查询
  • 原文地址:https://www.cnblogs.com/google4y/p/3370748.html
Copyright © 2020-2023  润新知