2011-02-24 193 views
0

在服務器啓動時調用Servlet中的Thread.sleep時,Tomcat無法啓動。在服務器啓動時調用Servlet中的Thread.sleep時,Tomcat無法啓動

在服務器啓動時加載了一個Servet。在servlet的init方法內部,調用MailSenderUtility類的sendMail方法。在sendMail方法中,如果不是晚上8點,我已經調用Thread.sleep()方法來將程序休眠一段計算時間。

由於此代碼(Thread.sleep)服務器沒有啓動。如果我刪除Thread.sleep語句,它工作正常。

請幫助,讓我知道是否有更好的方法來做到這一點。據您所知,由於某些限制,我無法將Quartz和Java Timer類用於我的調度程序。

感謝大家的支持。

Dheeraj

回答

2

Dheeraj你不能 「停止」 負責初始化線程。因爲Servlet對象不適合這個,所以在別的地方做吧。

你需要的是ContextListener。描述得很好also here

祝你好運!

2

很明顯,你正在把主線程睡覺。

相反,您應該創建一個單獨的線程並在其上運行MailSenderUtility。然後你可以睡這個線程而不影響主初始化線程。

一個簡單的例子:

new Thread(new Runnable(){ 
     public void run() { 
      // start MailSenderUtility here 
     } 
    }).start(); 
+0

好耶,但從來沒有忘記正確地停止線程,否則你在調動方面遇到的問題(在Tomcat日誌中的錯誤)。我很高興推薦使用ContextListener並正確實現其ContextDestroyed方法。 – lzap 2011-02-24 10:11:20

+0

同意。您的解決方案無疑更清潔。我的只是一個快速入侵。 – 2011-02-24 10:12:52