【问题标题】:Tomcat failed to start when calling Thread.sleep inside servlet on server startup [duplicate]在服务器启动时调用 Servlet 内的 Thread.sleep 时,Tomcat 无法启动 [重复]
【发布时间】:2011-07-03 10:46:23
【问题描述】:

在服务器启动时在 servlet 中调用 Thread.sleep 时,Tomcat 启动失败。

有一个在服务器启动时加载的 Servet。在 servlet 的 init 方法中,调用 MailSenderUtility 类的 sendMail 方法。在 sendMail 方法中,如果不是晚上 8 点,我调用了 Thread.sleep() 方法让程序休眠一段计算的时间。

由于此代码 (Thread.sleep),服务器无法启动。如果我删除 Thread.sleep 语句,它工作正常。

如果有更好的方法,请帮助并告诉我。据您所知,由于某些限制,我无法将 Quartz 和 Java Timer 类用于我的调度程序。

感谢大家的支持。

迪拉杰

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    Dheeraj 你不能“停止”负责初始化的线程。在其他地方做,因为 Servlet 对象不适合这个。

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

    祝你好运!

    【讨论】:

      【解决方案2】:

      显然你正在让主线程进入睡眠状态。

      相反,您应该创建一个单独的线程并在其上运行 MailSenderUtility。然后就可以在不影响主初始化线程的情况下休眠这个线程了。

      一个简单的例子:

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

      【讨论】:

      • 嗯,是的,但永远不要忘记正确停止线程,否则您会在上下文重新部署期间遇到问题(tomcat 日志中的错误)。我强烈建议使用 ContextListener 并正确实现其 contextDestroyed 方法。
      • 同意。您的解决方案无疑更清洁。我的只是一个快速破解。
      猜你喜欢
      • 2013-03-13
      • 2014-07-14
      • 2011-07-17
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      相关资源
      最近更新 更多