介绍
Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。
构造器
ForkJoinPool是ExecutorService的实现类,有两个构造器
public ForkJoinPool(int parallelism):创建一个包含parallelism个并行线程的ForkJoinPool
public ForkJoinPool() :以Runtime.getRuntime().availableProcessors()的返回值作为parallelism来创建ForkJoinPool
使用
RecursiveAction 没有返回值的任务
通过 ForkJoinPool::submit 方法提交
RecursiveTask 有返回值的任务
通过 ForkJoinPool::invoke 方法提交
实现类中需要实现compute方法,并实现任务切分和合并的逻辑,创建子Action或task,并调用对应的fork join方法。
jdk中的应用
CompletableFuture , parallelStream 并行流就是用Fork/Join框架实现,默认使用jvm中的 common 线程池执行。
如果想在并行流中使用自定义的线程池,可以手动创建ForkJoinPool,然后将stream操作委托给手动创建的线程池执行。
参考:
https://blog.csdn.net/weixin_41404773/article/details/80733324
CompletableFuture 介绍和使用:https://www.liaoxuefeng.com/wiki/1252599548343744/1306581182447650