Java ForkJoinPool没有做我期望的事情
我只是在学习Java的ForkJoinPool。为了获得更好的理解力,我为自己树立了一个小榜样。我希望我编写的代码能够产生一些输出,但在控制台窗口中什么也看不到。没有错误,因此我可能会误解如何使用此服务。请忽略那些似乎无法准确描述方法所做工作的方法名称。这毕竟是临时代码Java ForkJoinPool没有做我期望的事情,java,multithreading,join,fork,pool,Java,Multithreading,Join,Fork,Pool,我只是在学习Java的ForkJoinPool。为了获得更好的理解力,我为自己树立了一个小榜样。我希望我编写的代码能够产生一些输出,但在控制台窗口中什么也看不到。没有错误,因此我可能会误解如何使用此服务。请忽略那些似乎无法准确描述方法所做工作的方法名称。这毕竟是临时代码 import java.util.concurrent.RecursiveAction; public class SortTask extends RecursiveAction { final int THRESH
import java.util.concurrent.RecursiveAction;
public class SortTask extends RecursiveAction {
final int THRESHOLD = 10;
int[] array;
int begin, end;
public SortTask(int[] array, int begin, int end) {
this.array = array;
this.begin = begin;
this.end = end;
}
@Override
protected void compute() {
if((end - begin) < THRESHOLD) {
for(int i = 0; i < array.length; i++) {
System.out.println(i);
array[i] = i;
}
} else {
int middle = (end - begin) / 2;
invokeAll(new SortTask(array, begin, middle), new SortTask(array, begin, middle));
merge(array, begin, end);
}
}
public void merge(int[] array, int begin, int end) {
System.out.println(array.length);
}
}
您的Java程序在ForkJoin任务真正开始之前退出。启动任务后,您需要使用
invoke
而不是execute
来“等待”任务完成
pool.invoke(st);
非常确定您希望
middle,end
用于本部分的第二部分:invokeAll(new-SortTask(array,begin,middle),new-SortTask(array,begin,middle))代码>可能需要inti=begin;iUse 1000用于end
而不是999。或者使用(数组,中间+1,结束)
开始第二个任务,并使用i
pool.invoke(st);