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);
}
}
另外:
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
對''end'使用1000而不是999.或者用'(array,middle + 1,end)'開始第二個任務,並在循環中使用'i <= end'。 – AJNeufeld