0
私はJavaのForkJoinPoolについて学んでいます。より良いレベルの理解を得るために、私は自分自身のための小さな例を作りました。私は、出力を生成するために書いたコードを期待していますが、コンソールウィンドウに何も表示されません。エラーはないので、このサービスの使い方を誤解している可能性があります。メソッドが何をしているのかを正確に記述していないメソッド名は無視してください。これは結局のところスクラッチコードです。また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);
}
}
:
ForkJoinタスクが実際に起こって開始する前に、あなたのJavaプログラムが終了しているimport java.util.concurrent.ForkJoinPool;
public class Main {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().availableProcessors());
int[] list = new int[1000];
SortTask st = new SortTask(list, 0, 999);
ForkJoinPool pool = new ForkJoinPool();
pool.execute(st);
}
}
したいかなり確信して 'ミドル、この第二の部分のためのend':' invokeAll(新しいSortTask(配列、開始、中央)、新しいSortTask(配列、開始、真ん中)); 'は – AJNeufeld
はおそらくしたいです'int i = begin;ここでは 'for(int i = 0; i
AJNeufeld
999ではなく 'end'に1000を使用するか、'(array、middle + 1、end) 'で2番目のタスクを開始し、ループで' i <= end'を使用します。 – AJNeufeld