吃透Java并发二十:线程池之Fork/Join框架(2)实现

一、引言

回顾一下,Fork/Join框架的核心实现类是ForkJoinPool线程池,其它核心组件包括:ForkJoinTask(任务)、ForkJoinWorkerThread(工作线程)、WorkQueue(任务队列)。

这一章,我们将深入F/J框架的实现细节,看看ForkJoinPool线程池究竟有何特殊之处,F/J框架的整个任务调度流程又是怎样的。

二、任务调度流程

在开始之前,先来看下下面这张图:
在这里插入图片描述
上图包含了F/J框架的整个任务调度流程,这里先简要介绍下,以便有个印象,后续的源码分析将完全按照这张图进行。

F/J框架调度任务的流程一共可以分为四大部分。

1、任务提交

任务提交是整个调度流程的第一步,F/J框架所调度的任务来源有两种:

①外部提交任务

所谓外部提交任务,是指通过ForkJoinPool的execute/submit/invoke方法提交的任务,或者非工作线程(ForkJoinWorkerThread)直接调用ForkJoinTask的fork/invoke方法提交的任务:
在这里插入图片描述
外部提交的任务的特点就是调用线程是非工作线程。这个过程涉及以下方法:

  • ForkJoinPool.submit
  • ForkJoinPool.invok

猜你喜欢

转载自blog.csdn.net/u013277209/article/details/104295486