eclipse中tomcat自动部署时自动停止问题processWorkerExit(w,completedAbruptly)
1、问题描述
在eclipse或者集成eclipse的其他开发工具中,在tomcat中部署了项目debug模式启动项目,
项目启动之后修改项目java源代码,eclipse会自动部署项目到tomcat中。
但在tomcat自动重启时会自动停止到processWor kerExit(w,completedAbruptly);这一行代码上。
2、问题出现原因
原因是因为在java.util.concurrent.ThreadPoolExecutor类中的runWorker(Workerw)方法上有未捕获的异常信息,源代码如下:
可见在try之后并没有catch语句。而在eclipse的javadebug模式中就有“遇到未捕获异常停止执行”的选项。只要不勾选该项就可以解决该问题了。
finalvoidrunWorker(Workerw){
Runnabletask=w.firstTask;
w.firstTask=null;
booleancompletedAbruptly=true;
try{
while(task!=null||(task=getTask())!=null){
w.lock();
clearInterruptsForTaskRun();
try{
beforeExecute(w.thread,task);
Throwablethrown=null;
try{
task.run();
}catch(RuntimeExceptionx){
thrown=x;throwx;
}catch(Errorx){
thrown=x;throwx;
}catch(Throwablex){
thrown=x;thrownewError(x);
}finally{
afterExecute(task,thrown);
}
}finally{
task=null;
w.completedTasks++;
w.unlock();
}
}
completedAbruptly=false;
}finally{
processWorkerExit(w,completedAbruptly);
}
}
3、解决方案
去掉java->debug->suspendexecutiononuncaughtexceptions选项钱的对勾就行了。如下图所示: