Я некоторое время программировал на Java, но плохо знаком с параллельным программированием, так что терпите меня!
Я пытаюсь разработать класс, содержащий группу классов Collection [например, ArrayLists], а затемчтобы найти указанное значение, он обходит все коллекции одновременно, останавливая все потоки, если находит данное значение.
Я вставил свой код ниже, и мне было интересно, если кто-нибудь знает, как в пределах методаве_добавляется_добавление_коллекций ()если один из потоков вернул Фьючерс вернул 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