ForkjoinPool流程图
2021-12-09 15:57:50 2 举报
ForkjoinPool代码执行逻辑
作者其他创作
大纲/内容
否
获取top槽任务
ForkJoinTask#fork
ForkJoinPool.WorkQueue#runTask
ForkJoinPool#signalWork
ForkJoinPool#externalPush
主线程
ForkJoinPool.WorkQueue#push
main方法
ForkJoinPool#externalSubmit
是:分割任务
是
ForkJoinTask.invoke
线程启动
当前线程是否为工作线程
ForkJoinPool#tryAddWorker
是否满足分割条件
任务完成
ForkJoinTask.doExec
ForkJoinTask.doInvoke
.ForkJoinPool.WorkQueue#execLocalTasks
ForkJoinPool#scan
ForEachTask#compute
运行状态status
是否达到最大线程数
调用doExec方法的场景很多,这块后续分支我感觉画不清晰,所以忽略了,请见谅。本文源码是基于一种场景来分析的。
创建工作线程
否:执行任务
工作线程扫描到任务后会执行此流程
CountedCompleter#propagateCompletion
ForkJoinWorkerThread#run
foreach()
ForkJoinPool#createWorker
否,则是外部线程
AbstractPipeline#copyInto
队列数组和当前线程队列是否为空
初始化队列,创建工作线程
ForkjoinPool流程图
入口
关注下公众号谢谢
是,任务提交到自个队列
=0
设置完成态
收藏
收藏
0 条评论
下一页