Ich lerne gerade über Java ForkJoinPool. Ich habe ein kleines Beispiel für mich geschaffen, um ein besseres Verständnis zu erreichen. Ich erwarte, dass der Code, den ich geschrieben habe, eine Ausgabe erzeugt, aber ich sehe nichts im Konsolenfenster. Es gibt keine Fehler, daher kann es sein, dass ich missverstanden habe, wie dieser Service genutzt wird. Bitte ignorieren Sie Methodennamen, die anscheinend nicht genau beschreiben, was die Methode macht. Das ist immerhin ein Scratch-Code.Java ForkJoinPool nicht das tun, was ich erwarte
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);
}
}
auch:
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);
}
}
Ziemlich sicher, dass Sie 'Mitte, end' für den zweiten Teil dieses:' invokeAll (neu SortTask (array, beginnen, Mitte), neue SortTask (array, beginnen, Mitte)); ' – AJNeufeld
Wahrscheinlich wollen 'int i = beginne; i
AJNeufeld
Verwenden Sie 1000 für "end" anstelle von 999. Oder starten Sie die zweite Aufgabe mit "(array, middle + 1, end)" und verwenden Sie "i <= end" in Ihren Loops. – AJNeufeld