繁体   English   中英

Tomcat 7和ScheduledExecutorService.shutdown

[英]Tomcat 7 and ScheduledExecutorService.shutdown

我正在使用ScheduledExecutorService运行计划的线程。
我实现了ServletContextListener.contextDestroyed并调用了ScheduledExecutorService.shutdownNowawaitTermination

这是一个例子:

@Override
public void contextDestroyed(ServletContextEvent servletcontextevent) {
    pool.shutdownNow(); // Disable new tasks from being submitted
    try {
      // Wait a while for existing tasks to terminate
      if (!pool.awaitTermination(50, TimeUnit.SECONDS)) {
        pool.shutdownNow(); // Cancel currently executing tasks
        System.err.println("Pool did not terminate");
      }
    } catch (InterruptedException ie) {
      // (Re-)Cancel if current thread also interrupted
      pool.shutdownNow();
      // Preserve interrupt status
      Thread.currentThread().interrupt();
    }        
}


不过,我仍然从Tomcat 7中收到以下错误:

严重:Web应用程序[/ servlet]似乎已启动名为[Timer-0]的线程,但未能停止它。 这很可能造成内存泄漏。

可以忽略此日志吗? 还是我做错了什么?

谢谢

您确定此错误与您的线程池有关吗? 从线程名称“ Timer-0”判断,它可能是由某种计时器启动的。

另外,您的shutdownNow()应该返回仍在等待终止的Task列表(请参阅JavaDoc)。 如果列表不为空,则可以构建逻辑以等待更多。

您正在正确关闭ScheduledExecutorService 但是,默认情况下,由ExecutorService创建的线程遵循以下命名约定: pool-X-thread-Y

Timer-0线程由Timer类创建。 在您的代码和库中查找它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM