tomcat沒法正常shutdown

最近遇到一個奇怪的問題,tomcat忽然沒法正常shutdown了,明明前幾天都一切正常,還覺得是jenkins出了什麼問題,後面發現手動shutdown失敗。最後才發現是引入了Quatz形成的,其根本緣由在於守護進程Daemon Thread。備忘下:html

在Java中有兩類線程:用戶線程 (User Thread)、守護線程 (Daemon Thread)。spring

 

所謂守護 線程,是指在程序運行的時候在後臺提供一種通用服務的線程,好比垃圾回收線程就是一個很稱職的守護者,而且這種線程並不屬於程序中不可或缺的部分。因 此,當全部的非守護線程結束時,程序也就終止了,同時會殺死進程中的全部守護線程。反過來講,只要任何非守護線程還在運行,程序就不會終止。數據庫

 

用戶線程和守護線程二者幾乎沒有區別,惟一的不一樣之處就在於虛擬機的離開:若是用戶線程已經所有退出運行了,只剩下守護線程存在了,虛擬機也就退出了。 由於沒有了被守護者,守護線程也就沒有工做可作了,也就沒有繼續運行程序的必要了。tomcat

 

將線程轉換爲守護線程能夠經過調用Thread對象的setDaemon(true)方法來實現。在使用守護線程時須要注意一下幾點:url

 

(1) thread.setDaemon(true)必須在thread.start()以前設置,不然會跑出一個IllegalThreadStateException異常。你不能把正在運行的常規線程設置爲守護線程。 .net

 

(2) 在Daemon線程中產生的新線程也是Daemon的。線程

 

(3) 守護線程應該永遠不去訪問固有資源,如文件、數據庫,由於它會在任什麼時候候甚至在一個操做的中間發生中斷。htm

http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html對象

把quartz設置成守護進程:blog

  <property name="quartzProperties">

     <props>

     <prop key="org.quartz.scheduler.makeSchedulerThreadDaemon">true</prop>

     <prop key="org.quartz.threadPool.makeThreadsDaemons">true</prop>

     </props>

    </property>

以上配置放在了class="org.springframework.scheduling.quartz.SchedulerFactoryBean" 的bean配置項中。

相關文章
相關標籤/搜索