一、问题描述
在eclipse或者集成eclipse的其余开发工具中,在tomcat中部署了项目debug模式启动项目,
项目启动以后修改项目java源代码,eclipse会自动部署项目到tomcat中。
但在tomcat自动重启时会自动中止到processWorkerExit(w, completedAbruptly);这一行代码上。
二、问题出现缘由
缘由是由于在 java.util.concurrent.ThreadPoolExecutor类中的 runWorker(Worker w)方法上有未捕获的异常信息,源代码以下:
可见在try以后并无catch语句。而在eclipse的java debug模式中就有“遇到未捕获异常中止执行”的选项。只要不勾选该项就能够解决该问题了。
final void runWorker(Worker w) {
Runnable task = w.firstTask;
w.firstTask = null;
boolean completedAbruptly = true;
try {
while (task != null || (task = getTask()) != null) {
w.lock();
clearInterruptsForTaskRun();
try {
beforeExecute(w.thread, task);
Throwable thrown = null;
try {
task.run();
} catch (RuntimeException x) {
thrown = x; throw x;
} catch (Error x) {
thrown = x; throw x;
} catch (Throwable x) {
thrown = x; throw new Error(x);
} finally {
afterExecute(task, thrown);
}
} finally {
task = null;
w.completedTasks++;
w.unlock();
}
}
completedAbruptly = false;
} finally {
processWorkerExit(w, completedAbruptly);
}
}
三、解决方案java
去掉java->debug->suspend execution on uncaught exceptions 选项钱的对勾就好了。以下图所示:tomcat