关于线程池运行过程中,业务逻辑出现未知异常导致线程中断问题反思

最近在项目研发中的关于线程池应用过程中由于业务逻辑异常导致的线程中断,但程序未中断导致的脏数据问题

 话不多说,在最近最新的一个版本发布过程中,业务需要,我们要定期去给客户预留出可用的资源数据,提供客户使用,在版本即将上线前一周测试过程中,遇到的预留资源数据跟实际数据不匹配,刚开始反复检查代码,通过日志调试一直无果,经过不懈努力,最终终于发现是由于线程在跑业务时,抛出未知异常,当前线程中断,然而主程序并未异常,导致最终响应的数据与实际不符。下面我就简答举例说明下这个问题

1.获取资源数据demo

构造简答异常逻辑

在主程序中,可能会涉及到各种数据处理,导致我我们要对集合,数据,存储等进行各种操作,难免会存在异常场景不全的情况

对了这块说下,在循环块中如何规避对集合进行增删改所导致的问题,这边可以用迭代器进行处理

3.构造简单线程池对集合数据进行业务处理

 

 4.执行结果

通过以上简单的例子可以看出,由于线程异常中断,导致我们在最终拿到的数据可能跟我们预期的数据不符,导致在数据业务处理时出现各种问题,对此,在线程池的应用中,我们还是应该注意对新开的线程中的异常进行对应的捕获处理,虽然说看上去是个小问题,但是平时调试过程中出了问题,会导致我们的程序很难定位到具体的bug点,这对楼主来说就是个教训呀。在此希望各位能有所收益。假如你在新开的线程中没有设计对应的异常捕获,会造成,程序运行没问题,日志打的也ok  但是数据对不上,会让我们很难判断问题所在。在此与大家共勉。

最后,楼主说下,线程池最好还是借助成熟的Util工具,楼主只是简单举个例子,在实际应用过程中,成熟的工具在性能,内存消耗等各方面条件都是最优的,个人认为~~~~~

今天就先到这吧,洗洗睡吧,everybody~~~~

posted @ 2018-12-02 23:07  RoJeoL  阅读(1825)  评论(3编辑  收藏  举报