【Java】Java中J.U.C扩展组件之Fork,join

Fork/join介绍

【Java】Java中J.U.C扩展组件之Fork,join

  • 任务只能使用Fork、Join操作来作为同步机制,如果使用了其他同步机制,那他们在同步操作时,工作线程则不能执行其他任务。如:在框架的操作中,使任务进入睡眠,那么在这个睡眠期间内,正在执行这个任务的工作线程,将不会执行其他任务
  • 所执行的任务,不应该执行IO操作,如读和写数据文件
  • 任务不能抛出检查型异常,必须通过必要的代码处理它们

【Java】Java中J.U.C扩展组件之Fork,join

Fork/join代码演示

package com.rumenz.task;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ForkJoinPool;

import java.util.concurrent.ForkJoinTask;

import java.util.concurrent.RecursiveTask;

public class ForkJoinExample extends RecursiveTask<Integer> {

public final static int threshold=2;

private int start;

private int end;

public ForkJoinExample(int start, int end) {

this.start = start;

this.end = end;

}

@Override

protected Integer compute() {

int sum=0;

boolean b = (end - start) <= threshold;

if(b){

//任务足够小的时候,直接计算,不进行分裂计算

for (int i = start; i <=end ; i++) {

sum+=i;

}

}else{

int mid=(start+end)/2;

//继续分裂任务

ForkJoinExample task1=new ForkJoinExample(start,mid);

ForkJoinExample task2=new ForkJoinExample(mid+1,end);

// 执行子任务

task1.fork();

task2.fork();

// 等待任务执行结束合并其结果

Integer m = task1.join();

Integer n = task2.join();

sum=m+n;

}

return sum;

}

public static void main(String[] args) throws ExecutionException, InterruptedException {

//生成一个池

ForkJoinPool forkJoinPool=new ForkJoinPool();

ForkJoinTask task=new ForkJoinExample(1, 100000);

ForkJoinTask<Integer> submit = forkJoinPool.submit(task);

Integer sum = submit.get();

System.out.println("最后的结果是:"+sum);

}

}

关注微信公众号:【入门小站】,解锁更多知识点

【Java】Java中J.U.C扩展组件之Fork,join

以上是 【Java】Java中J.U.C扩展组件之Fork,join 的全部内容, 来源链接: utcz.com/a/103644.html

回到顶部