【发布时间】:2015-10-25 14:39:08
【问题描述】:
我必须编写一个并发的合并排序应用程序。每次数组被拆分时,我都必须为右半部分创建一个新线程(最大线程数为 5 -> 所以 5 次),这将继续 Mergesort 算法。
这是我的程序:
class Mergesorts implements Runnable{
private int[] internal;
Mergesorts(int[] arr) {
internal = arr;
}
private void processCommand(int [] array) {
if (array.length > 1) {
int[] left = leftHalf(array);
int[] right = rightHalf(array);
processCommand(left);
processCommand(right);
merge(array, left, right);
}
}
public int[] rightHalf(int[] array) {
int size1 = array.length / 2;
int size2 = array.length - size1;
int[] right = new int[size2];
for (int i = 0; i < size2; i++) {
right[i] = array[i + size1];
}
return right;
}
public void run() {
processCommand(internal);
}
}
如何重写我的代码以按上述方式同时排序?
如何编辑我的代码,使其最多只能创建 5 个线程而不是更多?
private void processCommand(int [] array) {
if (array.length > 1) {
int[] right = rightHalf(array);
int[] left = leftHalf(array);
Mergesorts worker2 = new Mergesorts(right);
Thread s = new Thread(worker2);
s.start();
processCommand(left);
try {
s.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
merge(array, left, right);}
}
【问题讨论】:
-
问题是什么?到底是谁在支持一个问题......这不是一个问题?!
-
问题是我应该在我的代码中的哪个位置创建继续执行相同算法的新线程
-
我希望 SO 要求您在发布之前进行某种测试。这样我们就不会有这些半途而废的问题。诱使提问者将问题表述为可回答的形式需要不必要的时间。
-
@Merve 每次将数组一分为二时,您都需要创建一个新线程。前半部分可以继续处理前半部分,新线程开始处理后半部分。
-
请在此处提供足够的演示或想法以获得解决方案。
标签: java multithreading concurrency mergesort