ForkJoin


Fork/Join框架强调任务的分解。
该框架主要有Fork,join两个操作组成,Fork操作主要用于对任务和数据进行划分。join操作用于对各个部分的运行结果进行合并
该框架有一个重要的方法,叫做工作窃取法,当一个线程完成任务时,会去查看其它线程是否完成了任务,如果没有,就将窃取一部分任务来处理,提高效率和资源利用率

继承RecursiveTask类,重写compute方法。来创建线程任务

package com.luoKing.ForkJoin;


import java.util.concurrent.RecursiveTask;

public class ForkJTask extends RecursiveTask{
    //计算1-10_0000_0000的和
    //具体任务
    private Long start;
    private Long end;
    private int temp = 5_0000;//门槛值



    public ForkJTask(Long start, Long end) {
        this.start = start;
        this.end = end;
    }

    @Override
    protected Long compute() {
        if((end-start)

使用ForkJoinPool类来启动线程任务

package com.luoKing.ForkJoin;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;

public class test {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ForkJoinPool forkJoinPool = new ForkJoinPool();
        ForkJTask forkJTask = new ForkJTask(0L,10_0000_0000L);
        ForkJoinTask submit = forkJoinPool.submit(forkJTask);
        System.out.println(submit.get());

    }
}

Fork/Join框架的编程模式决定了它更适合具有递归操作的程序,通常需要程序员手动设置阈值。可操作性强

相关