2012-04-27 42 views
-1

我有我的multithreaded ENV一个Vector获取前5个要素,我需要得到它的第一个5个元素传递给一个threadpool从矢量

。有没有关于这方面的最佳做法? (我的意思是使用Java的util类)

我可以做一个​​块内并通过向量循环,直到我找到前5个元素。我想知道是否正确的做法。

请咨询我。

更新第------

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

  1. 类A将具有载体(根据优先级排序。这将在唤起注意频率更新。我需要得到所述第一5种元素)

  2. B类将具有延长的myOwnThreadPooljava.util.ThreadPoolExecutor并重写它的afterExecute方法。 (池大小为5)

  3. 类A会得到来自载体的第一5个元素,并将其发送给B类池来处理。

  4. 一旦afterExecute方法通知一个线程返回我将挑选从vector第一最元件(类A /最优先),并将其发送到池来处理。

我想现在我的问题给了你一个更好的主意。

谢谢大家的答案/引导和进一步的建议都非常欢迎。

+0

它仍然被修改?它的大小可能会低于5? – 2012-04-27 03:23:09

+0

'矢量'是线程安全的..,你关心什么? – 2012-04-27 03:23:38

+0

@LouisWasserman - NOP这将是5或某种配置的整数。 – Sam 2012-04-27 05:06:55

回答

6

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

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

这不会使元素的副本,只有建立一个视图到载体中。您可以添加复制如下:

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

谢谢你指出了这一点。这对我来说是一件新事物。 – Sam 2012-04-27 05:10:19

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()); 
    } 
+0

@Garbadge - 谢谢你的回答。我刚刚知道这个'synchronizedList'。 – Sam 2012-04-27 05:06:01