zoukankan      html  css  js  c++  java
  • Java守护线程

    最近的项目使用的是dubbo。Web工程发布在Tomcat上,会作为消费者调用其他的dubbo微服务。但是最近发现一个问题,在使用shutdown命令关闭tomcat的时候,Tomcat并没有真正关闭,进程仍然在运行。

    上网查了以下,原因是netty有时候会启动一个非守护线程。那么守护线程和非守护线程有什么区别呢?

    Java语言中,可以创建两种进程:守护线程和用户线程。
    用户线程就是我们平时创建的普通线程。守护线程主要是用来为用户线程服务的。为什么创建一个用户线程会导致前面我们提到的问题呢。其实JDK中已经说得很明白了:

    The Java Virtual Machine exits when the only threads running are all daemon threads.

    翻译过来就是:当Java虚拟机中运行的线程全都是守护线程的时候,Java虚拟机就会退出。

    也就是说,当Java虚拟机中所有的用户线程都结束了的时候,Java虚拟机就会退出了。

    怎样启动一个守护线程呢?在调用线程的start()方法之前,调用线程的setDaemon(true)方法,就可以了。但是我们不能把一个已经启动的线程设置为守护线程,因此在start()之后导游setDaemon方法的话,会抛出异常。

    本博客文章除特别声明外,均为本人原创。本着互联网精神,欢迎转载。转载请注明出处
  • 相关阅读:
    各种排序(二)
    各种排序(一)
    【游记】CSP-S2019游记
    【题解】hdu1506 Largest Rectangle in a Histogram
    【题解】CF161B Discounts
    【CSP-S膜你考】我们的可可西里
    Bzoj3675 [Apio2014]序列分割
    Bzoj3853 GCD Array
    Bzoj3876 [Ahoi2014]支线剧情
    Bzoj2324 [ZJOI2011]营救皮卡丘
  • 原文地址:https://www.cnblogs.com/afrag/p/6254215.html
Copyright © 2011-2022 走看看