从向量中获取前5个元素

时间:2012-04-27 03:18:23

标签: java multithreading loops collections

我的Vector env中有multithreaded,我需要将其前5个元素传递给threadpool

。这周围有什么最好的做法吗? (我的意思是使用java util类)

我可以在synchronized块内完成并循环遍历向量,直到找到前5个元素。我想知道这是正确的方法。

请告诉我。

更新部分------

请找到我需要解决的实际问题。

  1. A类将有一个向量(根据优先级排序。这将以高频率更新。我需要获得前5个元素)

  2. B类将myOwnThreadPool扩展java.util.ThreadPoolExecutor并覆盖它的afterExecute方法。 (池大小为5)

  3. A类将从向量中获取前5个元素,并将其发送到B类池进行处理。

  4. 一旦afterExecute方法通知一个线程被返回,我将从vector中选择第一个最重要的元素(在A类中/具有最高优先级)并将其发送到池中过程

  5. 我认为现在我的问题为你们提供了一个更好的主意。

    谢谢大家的答复/指导,非常欢迎进一步的建议。

2 个答案:

答案 0 :(得分:6)

Vector提供subList方法,您可以按如下方式使用:

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

这不会复制元素,只会在向量中构建视图。您可以按如下方式添加复制:

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

答案 1 :(得分:1)

请不要使用Vector。请考虑使用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());
  }