469 Star 3.1K Fork 1.2K

GVP京东零售 / asyncTool

 / 详情

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

Done
Bug
Opened this issue  
2021-03-06 00:42

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

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

Attachments

Comments (4)

cc created缺陷
cc set related repository to 京东零售/asyncTool
展开全部操作日志

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

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

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

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

cc changed issue state from 待办的 to 已完成

Sign in to comment

状态
Assignees
Projects
Milestones
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
Branches
Planed to start   -   Planed to end
-
Top level
Priority
Duration (hours)
确定
参与者(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

Search

102255 3a0e046c 1850385 102255 7aaa926c 1850385