首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程MergeSort

多线程MergeSort
EN

Stack Overflow用户
提问于 2015-12-23 21:41:58
回答 2查看 464关注 0票数 0

我想实现一个多线程的合并排序。

下面是我的代码:

代码语言:javascript
复制
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并完成他的作业。我在没有线程的情况下尝试,只是调用Mergesort(左)...它起作用了,所以我的算法是正确的,但是当我尝试处理线程时,列表没有排序。

那么,如何同步线程呢?我知道会有太多的线程,但我只想知道如何同步来排序列表。

EN

回答 2

Stack Overflow用户

发布于 2015-12-23 21:46:20

我不能确切地说出,因为一些代码丢失了,但看起来确实像是你用"left“两次调用了mergesort。

票数 0
EN

Stack Overflow用户

发布于 2015-12-23 21:47:18

有几件事需要牢记:

  1. 只是通过创建线程,不要假设线程会立即开始运行。
  2. 您正在将left作为参数注入到您的线程,而不是l和r。
  3. 如果您想让它工作,您将需要每个线程对来完成其任务,一旦完成,您就可以在合并结果后继续下两个部分。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34436999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档