Java 使用2个线程对列表进行排序

Java 使用2个线程对列表进行排序,java,multithreading,sorting,arraylist,Java,Multithreading,Sorting,Arraylist,我正在做一个项目,但我没有得到这个部分: 使用两个线程对ArrayList进行排序。每个线程都有一种 名单的一半。主线程将等待两个线程完成, 然后,他将负责从两个列表中合并两个列表 其他线程。最后,我们将有一个排序列表。合并 列表不应该是那种传统的方式 我在类ListPersonne中尝试这样做,然后这个类对数组列表进行排序: Thread T1 = new ListePersonne( mylist.subList(0, unique.size()/2)); Thread T2 = new

我正在做一个项目,但我没有得到这个部分:

使用两个线程对ArrayList进行排序。每个线程都有一种 名单的一半。主线程将等待两个线程完成, 然后,他将负责从两个列表中合并两个列表 其他线程。最后,我们将有一个排序列表。合并 列表不应该是那种传统的方式

我在
类ListPersonne
中尝试这样做,然后这个类对
数组列表进行排序

 Thread T1 = new ListePersonne( mylist.subList(0, unique.size()/2));
 Thread T2 = new ListePersonne(mylist.subList(unique.size()/2, unique.size())  );
 T1.start();
 T2.start();

但是在结果中,我只完成了第一部分,而没有完成第二部分。arraylist不是线程安全的

试试向量

1)在合并前检查两个子列表的排序是否完成


2) 检查您是否使用多线程对数组列表的同步访问。

因为这是家庭作业,所以我不会给您代码。这里有一些提示

  • 使用
    Future
    以及
    Callable
    executor
    <代码>可调用 允许您返回与Runnable不同的类型,Runnable不能返回
  • future.get()
    将阻塞,直到线程完成执行。做 这对两个线程都适用
  • 一旦有了这两个已排序的列表,就合并

  • 不知道你的老师是否会接受这个解决方案,尽管他没有教你关于Executor框架的知识,但我相信你能说服他/她;)

    您是否等待线程完成?如果您不理解合并,请参阅此合并排序算法:您没有提供足够的代码/信息进行诊断。在合并列表部分之前,您必须在两个线程上进行
    连接,这是一件事。@user1417996请提供完整的源代码,如何处理结果、合并列表等。ArrayList一次从一个线程使用,因此线程安全不是问题。仅供参考的向量也不是线程安全的。它们只是同步的,这实际上弊大于利。不,我没有使用同步访问,我的列表中只有10个元素!!不,两个工作进程之间没有共享数据,因此不需要同步。但是@user1417996,你有一个非常错误的理由不同步!列表中有多少元素有什么关系?即使您有一个共享变量并从多个线程访问它,这也可能是一个问题: