我一直在用Java編程一段時間,但是對於併發編程來說是新的,所以請耐心等待!Java併發集合搜索
我試圖開發出擁有一組集合類[例如的ArrayList]的類,然後找到一個特定值遍歷同時所有集合,停止所有線程如果發現給定值。
我粘貼了下面的代碼,並想知道是否有人知道如何在contains_multiple_collections()中捕獲如果其中一個線程返回Futures返回true?
感謝
格雷厄姆
public class CollectionGroup<V> extends ContainerGroup
{
//...
public boolean contains(V value)
{
boolean containsValue = false;
if (mCollections.size() == 1)
{
containsValue = mCollections.get(0).contains(value);
}
else
{
containsValue = contains_multiple_collections(value);
}
return containsValue;
}
private boolean contains_multiple_collections(V value)
{
// thread pool
int numberProcessors = mCollections.size();
ExecutorService es = Executors.newFixedThreadPool(numberProcessors);
for (int i=0; i<numberProcessors; i++)
{
AbstractCollection<V> collection = mCollections.get(i);
MyCallable callable = new MyCallable(collection,value);
Future<Boolean> future = es.submit(callable);
//...
}
return true;
}
private class MyCallable implements Callable<Boolean>
{
protected AbstractCollection<V> mCollection;
protected V mValue;
public MyCallable(AbstractCollection<V> collection, V value)
{
mCollection = collection;
mValue = value;
}
@Override
public Boolean call() throws Exception
{
boolean ok = mCollection.contains(mValue);
return ok;
}
} // class MyCallable
} // class CollectionGroup
嗨。感謝您的回覆,並花時間概述所需的代碼。我會將你的代碼粘貼到我的手中,讓你知道它的表現。 –
我實現了你的代碼,它效果很好 - 非常感謝你的幫助。另外,我最初提到我是新來的併發編碼,並仔細研究了你的方法。爲了測試實現,我建立了一組4個列表,並用1e7整數填充並隨機插入一個已知值;因此該方法必須通過40mn的值來搜索單個值。它運作良好,速度很快。 –