ForkJoinPool框架设计与实现

1、类层次图

ctl:

占8个字节

AC:活动工作线程数减去目标并发度

TC:总工作线程数减去目标并发度

SS:版本号及最上层等待线程的状态

 ID:等待的Treiber栈顶的池索引

初始值为

this.ctl = ((np << AC_SHIFT) & AC_MASK) | ((np << TC_SHIFT) & TC_MASK),其中np = (long)(-parallelism)

扫描二维码关注公众号,回复: 13129207 查看本文章

this.config = (parallelism & SMASK) | mode,同步模式时mode=0,异步模式时mode=1<<16

runState:

状态名 状态值
RSLOCK 1
RSIGNAL 1<<1
STARTED 1<<2
STOP 1<<29
TERMINATED 1<<30
SHUTDOWN 1<<31

2、WorkQueue

工作队列有两类

(1)有工作线程绑定的队列:数组下标为奇数,称为task queue队列中的任务均由工作线程调用产生

(2)没有工作线程绑定的队列:数组下标为偶数,称之为submissions queue,由execute/submit/invoke或者ForkJoinTask.fork产生

scanState:

状态值 状态说明
<0 未激活
奇数 扫描

3、任务提交流程

4、工作线程任务执行流程

猜你喜欢

转载自blog.csdn.net/wuli2496/article/details/112640307