在Tomcat中,我编写了一个ServletContextListener,它将在启动过程中启动ExecutorService,并在卸载时终止它。

我正在跟随ExecutorService的javadoc中的示例

public void contextDestroyed( ServletContextEvent sce )
{
    executor.shutdown();
    try
    {
        executor.awaitTermination( 50, TimeUnit.SECONDS );
    }
    catch( InterruptedException ie )
    {
        Thread.currentThread().interrupt();
    }
}

我的问题是我应该在contextDestroyed()方法中传播InterruptedException吗?

最佳答案

我会说不。容器将contextDestroyed方法作为通知来通知上下文即将被拆除,这并不是在征求您的许可。另外,如果您从Javadoc抛出异常,则Javadoc不会定义会发生什么,因此结果可能是不可预测的和/或不可移植的。

我要做的是在catch块内调用executor.shutdownNow()强制终止执行程序(即“您有机会,现在停止”)。

关于java - 关闭ExecutorService,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1431573/

10-10 21:47