779 Star 7.1K Fork 2.5K

GVP京东零售 / asyncTool

 / 详情

任务多且线程少时会一直超时,只能加大核心线程数解决

已完成
缺陷
创建于  
2021-03-06 00:42

你好,发现一个问题,当任务很多且依赖关系复杂时,会发生阻塞超时的情况,这时需要加大线程池核心线程数才能解决。查看源代码好像发现了问题所在。
WorkerWrapper.beginNext 方法内有一段
输入图片说明

这时假设线程池只有一个线程,CompletableFuture.runAsync 会另起线程异步执行,且下面CompletableFuture.allOf(futures).get()会阻塞代码占用当前线程,这样异步执行的逻辑就没办法执行了吧。。。
这时只有加大线程数才能解决问题,不然就会一直等待。

评论 (4)

cc 创建了缺陷
cc 关联仓库设置为京东零售/asyncTool
展开全部操作日志

是的,正常不应该用默认的CommonPool,应该传入自定义的线程池。根据自己业务、并发量,设置100-500不等

是的,正常不应该用默认的CommonPool,应该传入自定义的线程池。根据自己业务、并发量,设置100-500不等

我用ForkJoin替换掉ExecutorService和CompletableFuture可以支持不限制线程数了,测试了一下test文件夹下的和公司业务代码没发现什么问题 :smile:
输入图片说明
输入图片说明
输入图片说明
输入图片说明

能解决就好。一般我门会限制线程数,不会让他无限增长

cc 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
303698 tianyalei 1578919857
Java
1
https://gitee.com/jd-platform-opensource/asyncTool.git
git@gitee.com:jd-platform-opensource/asyncTool.git
jd-platform-opensource
asyncTool
asyncTool

搜索帮助