我有一個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
我將編輯包含該場景的答案 –