Java Tomcat 7和ScheduledExecutorService.shutdown

Java Tomcat 7和ScheduledExecutorService.shutdown,java,tomcat7,executorservice,Java,Tomcat7,Executorservice,我正在使用ScheduledExecutorService运行调度线程。 我实现了ServletContextListener.contextDestroyed并调用了ScheduledExecutorService.Shutdownow和等待终止 以下是一个例子: @Override public void contextDestroyed(ServletContextEvent servletcontextevent) { pool.shutdownNow(); // Disable

我正在使用
ScheduledExecutorService
运行调度线程。
我实现了
ServletContextListener.contextDestroyed
并调用了
ScheduledExecutorService.Shutdownow
等待终止

以下是一个例子:

@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]的线程,但未能停止它。这很有可能 创建内存泄漏

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


谢谢

您正确地关闭了您的
ScheduledExecutor服务
。但是,默认情况下,
ExecutorService
创建的线程遵循以下命名约定:
pool-X-thread-Y


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

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


此外,shutdownNow()还应返回等待终止的任务列表(请参阅JavaDoc)。若列表不是空的,你们可以建立逻辑来等待更多的时间。

我的意思是,我的想法是:你们的清理责任在哪里停止?这里还能做些什么?用消防水龙带打箱子?说真的,我想说的是,看起来你正在做你能做的一切。。。我将忽略该错误。您可以参考我以前的帖子:)是否等待已计划的任务或当前正在执行的任务?或者两者都有?是否有一种方法只等待当前正在执行的任务(比如,我不想等待一个小时内执行的任务,但我真的想等待一个当前在其<代码>执行程序> /代码>方法中间的任务吗?