-1

私はプロジェクトに取り組んでいますが、この部分を取得できませんでした:

2 つのスレッドを使用して ArrayList を並べ替えます。各スレッドには、リストの半分のようなものがあります。メイン スレッドは 2 つのスレッドが終了するのを待ってから、別の 2 つのスレッドからの 2 つのリストをマージします。最後に、ソートされたリストがあります。2 つのリストをマージすることは、従来の方法のようなものであってはなりません。

私はこのように試しclass ListePersonne、このクラスは次のようにソートしますArrayList:

 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();

しかし、結果として、私は最初の部分だけを完了しましたが、2番目の部分は完了しませんでした

4

3 に答える 3

0

arraylist はスレッドセーフではありません

代わりにベクターを試してください。

http://developer.android.com/reference/java/util/Vector.html

于 2012-05-28T08:29:22.023 に答える
0

これは宿題なので、コードは提供しません。ここにヒントがあります

  1. および とFuture<List>一緒に使用します。 Runnable とは異なり、タイプを返すことができますが、それはできません。Callable<List>executorCallable<T>
  2. future.get()スレッドが実行を完了するまでブロックします。両方のスレッドに対してこれを行います。
  3. 2 つの並べ替えられたリストを取得したら、マージします。

あなたの先生が Executor フレームワークについてあなたに教えていない場合に備えて、あなたの先生がこの解決策を受け入れるかどうかはわかりませんが、あなたは彼/彼女を納得させることができると確信しています ;)

于 2012-05-28T08:41:03.477 に答える
0

1) 両方のサブリストの並べ替えをマージする前に、次のことを確認します

2) 複数のスレッドから配列リストへの同期アクセスを使用していることを確認します。

于 2012-05-28T08:34:19.037 に答える