博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于线程池任务报错的处理与理解
阅读量:4296 次
发布时间:2019-05-27

本文共 502 字,大约阅读时间需要 1 分钟。

 

一个线程罢工的诡异事件

 这2篇文章讲到一个线程池使用抛异常相关的问题处理.第一篇是原著,第二篇是引用与讲解.通读之后,发现第一篇文章只读一遍并不能完全理解意思,而第二篇文章则是没有搞懂第一篇作者的意思,对线程池任务的理解也不对.

说说我对第一篇文章的理解:

业务中线程池里的任务应该是在不断循环消费数据,且线程池是单线程的.该线程池的任务对数据做简单处理就交给另一个线程池做处理.

任务的代码不能报错,否则会中断并结束任务.任务一直在,线程池就不会走到WAITING,而是RUNNABLE状态.

若代码报错,线程池的processWorkExit方法会删除该任务,并加入新的任务,而新的任务是null.不会执行任何业务逻辑.所以线程池一直处于WAITING状态.

任务被删除后,就没有再消费数据,因此数据库中的数据一直没有更新,而生产者的数据队列一直积累到满为止.

解决办法就是使Runnable任务不报错,从而能一直不断地处理消息.

对于第二篇文章,我想说的是,重点在于任务报错后,就没有任务去处理数据了,而不在于WAITING状态.不论是否报错,任务队列没有任务了,线程池都会走到WAITING状态.

转载地址:http://ehbws.baihongyu.com/

你可能感兴趣的文章
MySQL根据日期统计数据和查询数据
查看>>
VMware虚拟机安装MacOS
查看>>
Windows环境部署Wordpress
查看>>
Selenium+ChromeDriver使用记录
查看>>
cdp4j使用记录
查看>>
SpringBoot集成thymeleaf模板引擎
查看>>
ArcMap使用记录
查看>>
Java-Comparator比较器-中文排序
查看>>
nginx入门和使用实践
查看>>
吉他换弦
查看>>
软考报名入口及流程
查看>>
OpenResty入门和使用实践
查看>>
java+ffmpeg使用记录
查看>>
vue集成天地图
查看>>
vue集成统计图-DataV-Echarts-Highcharts
查看>>
MySQL在SQL中调用系统命令
查看>>
Java项目加入maven构建工具
查看>>
scrapy框架入门和使用实践
查看>>
OpenCV-Python计算机视觉入门
查看>>
flask框架入门和使用实践
查看>>