在线程调用里面 直接调用CompletableFuture.allOf(futures).get(); 会导致当前线程挂起.
如果串行任务A-B-C-D 会导致 A线程的挂起时间是4个单元的执行时间之和.
还有一个问题, 后继的线程如果已经执行, 前置的线程没运行的话, 直接改变状态后, 不调用future. 但是正在运行的线程没办法打断.
大佬, 我借鉴你这个,自己写了一个线程编排的工具, 这2个问题都可以解决. 看看有没有什么问题?
https://gitee.com/gepengjun/thread-flow
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
看不懂,串行A-B-C-D不是都在同一个线程中执行吗?
@nnxiaod 任务都是提交给线程池执行的
@gepengjun 串行任务只提交入口任务给线程池,并行任务才都提交给线程池。如果要分叉的话才用新线程吧。
@gepengjun 串行任务只提交入口任务给线程池,并行任务才都提交给线程池。如果要分叉的话才用新线程吧。
@nnxiaod 是的,你是对的. 分叉之后交给线程池来执行.
但问题是一样的, A后面并行执行B,C,D. 那么A的挂起时间就是B,C,D中执行最长的那个. 如果B,C,D后续还有任务,A的挂起时间会更长
dev分支的v1.5.1-SNAPSHOP版本解决了这个问题,并加入了很多功能,可以试试看(暂未大规模测试过,可能会有潜在bug)
什么场景下CompletableFuture不够不得不使用asyncTool的
登录 后才可以发表评论