fork/join 中的RecursiveTask与RecursiveAction用法

什么是Fork/Join框架  (是一种思想)

        Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

当数据不多的时候,使用单线程更快一点 (一心一意做一件事情)   数据不多的时候,使用fork/join会变慢,因为数据还要进行拆分,再进行多线程执行。

工作窃取算法

         工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。工作窃取的运行(通俗一点的来说就是,自己这一队的事情干完了,我去把其他列队的事情拿来做

ForkJoinPool

        Java提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合成总的计算结果。

        ForkJoinPool是ExecutorService的实现类,因此是一种特殊的线程池。ForkJoinPool提供了如下两个常用的构造器。

 public ForkJoinPool(int parallelism):创建一个包含parallelism个并行线程的ForkJoinPool
 public ForkJoinPool() :以Runtime.getRuntime().availableProcessors()的返回值作为parallelism来创建ForkJoinPool

创建ForkJoinPool实例后,可以钓鱼ForkJoinPool的submit(ForkJoinTask<T> task)或者invoke(ForkJoinTask<T> task)来执行指定任务。其中ForkJoinTask代表一个可以并行、合并的任务。ForkJoinTask是一个抽象类,它有两个抽象子类:RecursiveAction和RecursiveTask。

RecursiveTask代表有返回值的任务
RecursiveAction代表没有返回值的任务。