Tomcat Servlet' s destroy()在服务tomcat7 stop'之后没有完成

时间:2015-01-08 17:42:14

标签: java multithreading tomcat servlets

我有一个Servlet应用程序,它在init()方法中生成工作线程。这些工作人员不断从事交易工作,即每项工作如果已经完成或未开始就很重要。

我希望我可以使用destroy()方法以优雅的方式停止这些工作线程,即在结束destroy()方法并终止之前确保它们已完成任何上一个/当前作业的servlet。

当Chef脚本执行destroy()

时会触发service tomcat7 stop

但是从我的日志/测试中,我的Servlet上的destroy()方法没有阻止/完成。它被触发,但过了一会儿,tomcat关闭了,我没有收到线程以优雅的方式停止的确认。

public void destroy() {
  log.info("Signaling worker to stop current job/not begin another.");
  this.worker.stop();
  while(this.worker.isProcessingJob()) {
    Thread.sleep(3 * 1000);
  }
  log.info("Worker successfully stopped");
  log.info("destroy() complete");
  super.destroy();
}

在许多情况下,我没有看到最后两个日志,即当我的代码在while-loop中等待this.worker完成当前作业时,Tomcat会关闭。

这是预期的行为吗?有没有办法告诉tomcat停止,还允许我的Servlet的destroy()方法阻止/完成?

0 个答案:

没有答案