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方法的话,会抛出异常。

    本博客文章除特别声明外,均为本人原创。本着互联网精神,欢迎转载。转载请注明出处
  • 相关阅读:
    ambari
    linux常用命令
    scala新版本学习(3)
    Spring中的AOP
    Spring中的Bean
    Spring的基本应用(1):依赖以及控制反转
    Scala新版本学习(2):
    python之time模块
    python之编码与解码
    爬虫之re数据提取的使用
  • 原文地址:https://www.cnblogs.com/afrag/p/6254215.html
Copyright © 2011-2022 走看看