-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. 一旦afterExecute方法通知返回一个线程,我将从vector(在 A 类 / 中具有最高优先级)中选择第一个最多的元素并将其发送到池中进行处理。

我想现在我的问题为大家提供了一个更好的主意。

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

4

2 回答 2

6

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

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 回答