我有一个REST应用程序(技术栈:Java8/Tomcat7/Spring4.2/Jersey2.15),在我的REST端点中使用了线程池(ThreadPoolExecutor)。
private ThreadPoolExecutor threadPool = (ThreadPoolExecutor) Executors.newFixedThreadPool(10);
终端点类通过spring注释@ Component进行配置(因此默认为单例)。
在ThreadPoolExecutor的javadoc中,我读到这个:
最终处理 不再在程序中引用且没有剩余线程的池将自动关闭。如果要确保即使用户忘记调用shutdown()也可以回收未引用的池,则必须安排未使用的线程最终死亡,通过设置适当的保持活动时间、使用零核心线程的下限或设置allowCoreThreadTimeOut(boolean)。
所以当我不调用threadPool.shutdown()时,池会在应用程序结束时关闭(通常在这种情况下,当tomcat关闭或应用程序停止时)。
我的问题是:我需要关心池的关闭吗?会发生副作用吗?(例如mem泄漏、长时间的Tomcat关闭时间等)还是它非常稳定?