Java 是否有必要为运行在Tomcat容器中的webapplication关闭ExecutorService?

Java 是否有必要为运行在Tomcat容器中的webapplication关闭ExecutorService?,java,tomcat,executorservice,Java,Tomcat,Executorservice,如果在Servlet的Tomcat容器中运行ExecutorService,是否有必要在某个时候关闭它。如果是,那么我应该在哪里调用关机?我尝试在submit()调用之后添加它,但是当我从客户端浏览器向Servlet发出另一个请求时,我得到了一个拒绝执行异常,这可能是因为我关闭了?我试图了解它在Tomcat内的Servlet中是如何工作的,以及应该如何使用它 我正在我的Web应用程序中执行以下操作(在没有任何关机的情况下,它似乎工作正常): }执行器服务背后的思想是重用线程。创建线程的成本很高,

如果在Servlet的Tomcat容器中运行
ExecutorService
,是否有必要在某个时候关闭它。如果是,那么我应该在哪里调用关机?我尝试在submit()调用之后添加它,但是当我从客户端浏览器向Servlet发出另一个请求时,我得到了一个
拒绝执行异常
,这可能是因为我关闭了?我试图了解它在Tomcat内的Servlet中是如何工作的,以及应该如何使用它

我正在我的Web应用程序中执行以下操作(在没有任何关机的情况下,它似乎工作正常):


}执行器服务背后的思想是重用线程。创建线程的成本很高,通常创建一个线程,然后多次使用同一个线程更有效。这正是
ExecutorService
所做的:它管理一个(可能是空闲的)线程池,并在您调用其
submit
方法时为它们分配工作

因此,在典型的应用程序中,您不希望关闭
ExecutorService
。但是,如果您的应用程序被终止,您应该正确关闭
ExecutorService
。因为您使用的是Spring,所以不必担心:

默认情况下,使用具有公共关闭或关闭方法的Java配置定义的bean会自动登记为销毁回调。[见附件。]


这意味着,如果您关闭
ApplicationContext
,Spring将自动为您关闭
ExecutorService

相关:@Marvin我已经阅读了链接中的评论,谢谢。但我应该在哪里调用shutdown,因为它会对连续请求抛出异常。如果我不关机会怎么样?非常感谢你的解释。Spring管理关闭的事实是我一直在寻找的缺失部分。
// In configuration class
@Bean (name = "executorService")
public ExecutorService executorService() {
  return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() + 1);
}

// In some other class
@Qualifier("executorService")
@Autowired
private ExecutorService executorService;
....
private void load() {
  executorService.submit(new Runnable() {
    @Override
    public void run() {
        doSomethingInTheBackground();
    }
});

// If I enable this I will get a RejectedExecutionException 
// for a next request.
// executorService.shutdown();