多线程MergeSort

时间:2015-12-23 13:41:58

标签: java multithreading merge java-8 mergesort

我想实现与多线程的合并。

所以这是我的代码:

public class MergeSort<E extends Comparable<T>> implements Runnable {

public void run() {
    mergeSort(array);
}

public synchronized void mergeSort(List<E> array) {     
    int size = array.size();
    if (size > 1){
        int mid = size / 2;
        List<T> l  = array.subList(0,mid);
        List<T> r = array.subList(mid,vec.size());
        Thread t = new Thread(new MergeSort<E>(left));
        Thread t2 = new Thread(new MergeSort<E>(right));
        t.start();
        t2.start();
        merge(l, r, array);
    }
}

我希望我的MergeSort运行,创建2个新线程,然后该方法调用merge并完成他的工作。 我尝试没有线程,juste通过调用Mergesort(左)...它工作,所以我的算法是正确的,但是当我尝试使用线程时,List没有排序。

那么,如何同步线程?我知道会有太多线程,但我只是想知道如何同步以对列表进行排序。

2 个答案:

答案 0 :(得分:0)

我无法准确说出因为某些代码丢失了,但看起来你似乎正在调用mergesort&#34; left&#34;两次。

答案 1 :(得分:0)

要记住几件事:

  1. 只是通过创建线程,不要假设线程会立即开始运行。
  2. 您将左侧作为参数注入到您的线程而不是l和r。
  3. 如果你想让它工作,你需要线程对每一个来完成它的任务,一旦完成,你可以在合并结果后继续下两个。