-1

私はVector自分の環境にを持っています、multithreadedそして私はその最初の5つの要素をに渡す必要がありますthreadpool

。これに関するベストプラクティスはありますか?(私はjava utilクラスを使用することを意味します)

ブロック内でそれを実行しsynchronized、最初の5つの要素が見つかるまでベクトルをループできます。私はそれを行う正しい方法だと思っています。

アドバイスしてください。

更新されたセクション------

私が解決する必要がある私の実際の問題を見つけてください。

  1. クラスAにはベクトルがあります(優先度に従って並べ替えられます。これは高頻度で更新されます。最初の5つの要素を取得する必要があります)

  2. クラスBには、myOwnThreadPoolを拡張し、そのメソッドjava.util.ThreadPoolExecutorをオーバーライドするがありますafterExecute。(プールサイズは5になります)

  3. クラスAは、ベクトルから最初の5つの要素を取得し、それをクラスBプールに送信して処理します。

  4. 1afterExecuteつのスレッドが返されることをメソッドが通知すると、vector(クラスA /で最も優先度の高い)から最初に最も多くの要素を選択し、それをプールに送信して処理します。

今、私の質問は皆さんにとってより良いアイデアを与えると思います。

回答/ガイダンスをありがとうございました。さらなる提案を歓迎します。

4

2 に答える 2

6

VectorsubListは、次のように使用できるメソッドを提供します。

List five = myVector.subList(0, 5);

これは要素のコピーを作成せず、ベクターにビューを構築するだけです。次のようにコピーを追加できます。

List five = new List();
Collections.copy(five, myVector.subList(0, 5));
于 2012-04-27T03:25:27.363 に答える
1

ベクターは使用しないでください。Collections.synchronizedList()同期リストの作成に使用することを検討してください。

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedList%28java.util.List%29

List list = Collections.synchronizedList(new ArrayList());
      ...
  synchronized(list) {
      Iterator i = list.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }
于 2012-04-27T04:47:16.083 に答える