【发布时间】:2020-03-26 05:19:20
【问题描述】:
我正在尝试进行多线程合并排序,但遇到了堆栈溢出错误,我不确定是什么原因造成的。
public static void concurrentMergeSort(int[] arr, int threadCount) {
if(threadCount <= 1){
regularMergeSort(arr);
return;
}
int middle = arr.length/2;
int[] left = Arrays.copyOfRange(arr, 0, middle); //Says error here
int[] right = Arrays.copyOfRange(arr, middle, arr.length);
concurrentMergeSort(left);//Says error here
concurrentMergeSort(right);
Thread leftSort = new Thread(new Sorting(left, threadCount));
Thread rightSort = new Thread(new Sorting(right, threadCount));
try{
leftSort.join();
rightSort.join();
}
catch (Exception ex){
ex.printStackTrace();
}
merge(arr, left, right);
}
public static void regularMergeSort(int[] arr){
if(arr.length == 1){
return;
}
int middle = arr.length/2;
int[] left = Arrays.copyOfRange(arr, 0, middle);
int[] right = Arrays.copyOfRange(arr, middle, arr.length);
regularMergeSort(left);
regularMergeSort(right);
merge(arr, left, right);
}
}
我在想也许是线程数永远不会减少,但是当我修改线程数时,我仍然得到相同的结果。在我添加常规合并排序和并发合并排序以将其分开之前,它也一直在工作。我也只添加了常规合并排序,因为仅使用并发合并排序方法几乎没有提高速度,并且这种合并排序修改的主要目的是增加使用多线程进行排序所需的时间。
【问题讨论】:
标签: multithreading sorting recursion merge