场景简单演示
首先演示一个简单的场景。
采用ThreadPoolExecutor
提交线程的方式,直接在多线程中执行的某个地方抛出一个异常。
用submit方法提交的情况:
调用的地方:
发现一直卡在那,没有任何错误日志。
改成execute方法提交多线程后:
多线程调用的地方:
发现控制台会打印错误日志了:
上面是我遇到问题后,演示的一个简单例子。
下面来看我遇到的真实的场景。
实际的场景
项目用的是Mybatis
框架,这里是xml文件中的一段sql查询语句。
最后的错误原因是rebatePlanId
没有在请求参数对应的属性里。所以这个sql实际是会报错的。但是由于用的多线程提交方式不对,导致没有打印日志。
执行到一半,只打印了sqlSession关闭的一些日志:
因为用了CountDownLatch,会等待前面的任务处理完后,才执行后面的逻辑,所以导致主线程一直挂起。
用execute方法提交线程后,就会打印报错日志: