1求1+到n的结果用fork/join线程池实现(未优化版)
public class TestFortJoin {
public static void main(String[] args) {
ForkJoinPool forkJoinPool=new ForkJoinPool(4);
System.out.println(forkJoinPool.invoke(new Task(5))); //根据需要修改5的值
}
}
class Task extends RecursiveTask<Integer>{
private int n;
public Task(int n) {
this.n = n;
}
@Override
protected Integer compute() {
if(n==1) return 1;
Task task=new Task(n-1);
//执行此任务
task.fork();
//求和
int result=n+task.join();
System.out.println("Thread:"+Thread.currentThread().getName()+","+n+"+"+task.join());
return result;
}
}
2.优化版(二分思想)
@Test
public void optimization(){
ForkJoinPool forkJoinPool=new ForkJoinPool(4);
System.out.println(forkJoinPool.invoke(new MyTask(1,5)));
}
class MyTask extends RecursiveTask<Integer>{
private int begin;
private int over;
public MyTask(int begin, int over) {
this.begin = begin;
this.over = over;
}
@Override
protected Integer compute() {
if(begin==over){
return begin;
}
int mid=(begin+over)/2;
MyTask l=new MyTask(begin,mid);
l.fork();
MyTask r=new MyTask(mid+1,over);
r.fork();
int result=l.join()+r.join();
System.out.println("Threadname:"+Thread.currentThread().getName()+","+l.join()+"+"+r.join());
return result;
}
}