2011-02-24 196 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