先来看一段forkjoin的代码:
public void func(){
for(int i=0;i<240;i+=24){
ForkJoinTask<Boolean> task = forkJoinPool.submit(new IteraPoint(i));
Boolean resultData = forkJoinPool.invoke(task);
}
}
public class IteraPoint extends RecursiveTask<Boolean> {
private int num;
public IteraPoint(int i){
this.num=i;
}
@Override
protected Boolean compute(){
return analyVariable(num);
}
}
private Boolean analyVariable(int num){
int n = num*2;
System.out.println(n);
}
上面的代码犯了一个错误,日志显示:两个线程进入IteraPoint的compute方法进行数据处理,重复操作:invoke和submit重复了
Boolean resultData = forkJoinPool.invoke(task); 改成task.get(),就只有一个线程进入IteraPoint的compute方法,可以获得异步线程执行结果,但是当前主线程会等待子线程执行完毕,所以最终效果依然是一个线程在处理数据