ForkJoinPool


概述

对大任务,分而治之

适合CPU密集型

工作现成之间可以窃取任务

都实现了Executor和ExecutorService接口,并继承了AbstractExecutorService抽类

两种任务类型:RecursiveAction(无结果)RecursiveTask(有结果)

原理

线程池:commonPool

四个参数:

并行数工作线程的创建异常处理模式指定

抽象任务:ForkJoinTask

核心方法:fork、join

任务窃取

允许从任务队列的双端,窃取任务进行执行

双端队列:pop、push、poll

从队列尾部窃取:降低多线程的对队列的竞争

两个假设:

队列中较旧的任务,可能颗粒度比较大,仍然需要进一步拆分 -> 工作线程从头部获取任务来执行

最近提交的任务,缓存命中率可能较高 -> 始终选择最近提交的任务去执行

用处:

1、JDK8中的**CompletableFuture、并行流**

2、JDK21中的**虚拟线程**


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !
  目录