Java 使用2个线程对列表进行排序
我正在做一个项目,但我没有得到这个部分: 使用两个线程对ArrayList进行排序。每个线程都有一种 名单的一半。主线程将等待两个线程完成, 然后,他将负责从两个列表中合并两个列表 其他线程。最后,我们将有一个排序列表。合并 列表不应该是那种传统的方式 我在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
类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,你有一个非常错误的理由不同步!列表中有多少元素有什么关系?即使您有一个共享变量并从多个线程访问它,这也可能是一个问题: