码迷,mamicode.com
首页 > 其他好文 > 详细

ForkJoinPool 源码

时间:2018-10-25 19:37:46      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:fork   int   随机数   含义   workqueue   ack   nstat   意思   run   

ForkJoinPool----FJP
先看task.fork方法,含义是将当前任务,放到当前线程的工作队列中。但是第一次执行这个方法是在主线程中,主线程是不可能被FJP管理的。那么就进入ForkJoinPool.common.externalPush,在common这个default的线程池里执行这个任务,
externalPush的意思,是把外面的任务,放到当前线程池中执行。刚进入externalPush,会检查随机数不是0,workQueues不是空,这些条件第一次肯定是不满足的,那么进入externalSubmit,先初始化随机数,

ctl是一个volatile long类型的控制变量,从高到低,前16位是(当前活跃线程数-最小并发数),往后16位是(总线程数-最小并发数),再往后16位是栈顶(Treiber stack)等待线程的标志,最后16位是栈顶等待线程在线程池数组中的位置。
runState是一个volatile int类型的控制变量,来标志当前线程池运行状态,有锁住,信号,已启动,停止,终止,关闭几种状态。

当然也可以不从fork方法进来,而是pool.invoke,已经有一个FJP了,直接执行任务

ForkJoinPool 源码

标签:fork   int   随机数   含义   workqueue   ack   nstat   意思   run   

原文地址:https://www.cnblogs.com/chuliang/p/9851726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!