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

我只是在学习Java的ForkJoinPool。为了获得更好的理解力,我为自己树立了一个小榜样。我希望我编写的代码能够产生一些输出,但在控制台窗口中什么也看不到。没有错误,因此我可能会误解如何使用此服务。请忽略那些似乎无法准确描述方法所做工作的方法名称。这毕竟是临时代码

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);