关闭ExecutorService

Jac*_*ine 10 java multithreading servlets exception-handling exception

在Tomcat中,我编写了一个ServletContextListener,它将在启动期间启动ExecutorService并在卸载时终止它.

我在关注ExecutorService的javadoc中的示例

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

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

ska*_*man 5

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

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