我有一个Web应用程序(使用Spring /春天启动)在Tomcat 7.There运行被等被定义一些的ExecutorService:当tomcat关闭时,ExecutorService管理的线程会发生什么情况?
public static final ExecutorService TEST_SERVICE = new ThreadPoolExecutor(10, 100, 60L,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(1000), new ThreadPoolExecutor.CallerRunsPolicy());
的任务很重要,必须正确完成。我捕捉到的异常以及它们保存到数据库的重试,就像这样:
try {
ThreadPoolHolder.TEST_SERVICE.submit(new Runnable() {
@Override
public void run() {
try {
boolean isSuccess = false;
int tryCount = 0;
while (++tryCount < CAS_COUNT_LIMIT) {
isSuccess = doWork(param);
if (isSuccess) {
break;
}
Thread.sleep(1000);
}
if (!isSuccess) {
saveFail(param);
}
} catch (Exception e) {
log.error("test error! param : {}", param, e);
saveFail(param);
}
}
});
} catch (Exception e) {
log.error("test error! param:{}", param, e);
saveFail(param);
}
所以,当Tomcat关闭,将发生在池的线程是什么(正在运行或在队列中等待)?如何确保所有任务或者在关机前正确完成,或者保存到数据库重试?
谢谢!它真的更优雅。但是当tomcat关闭时会发生什么?我担心未完成的任务正在运行或在队列中。如何确保在tomcat重启时完成所有任务。 – sxzhou
我将编辑包含该场景的答案 –