ForkJoin是Java7提供的原生多线程并行处理框架,其基本思想是将大任务分割成小任务,最后将小任务聚合起来得到结果。
Fork/Join使用两个类完成以上两件事情:
1.ForkJoinTask: 我们要使用ForkJoin框架,必须首先创建一个ForkJoin任务。它提供在任务中执行fork()和join()的操作机制,通常我们不直接继承ForkjoinTask类,只需要直接继承其子类。
1) RecursiveAction,用于没有返回结果的任务
2) RecursiveTask,用于有返回值的任务
2.ForkJoinPool:task要通过ForkJoinPool来执行,分割的子任务也会添加到当前工作线程的双端队列中,进入队列的头部。当一个工作线程中没有任务时,会从其他工作线程的队列尾部获取一个任务。通过此算法降低线程等待和竞争。
通过Fork/Join完成数组累加求和
定义一个类获取随机数组
import java.util.Random;
public class MakeArray {
/**
* 数组长度
*/
public static final Integer ARRAY_LENGTH = 100000;
/**
* 定义一个随机数组
*/
public static int[] makeArray(){
Random random = new Random();
int[] intArray = new int[ARRAY_LENGTH];
for (int i=0;