저는 언젠가 자바 프로그래밍을 해왔지만 동시 프로그래밍에 익숙하지 않으므로 나와 함께 감당하십시오!자바 동시 콜렉션 검색
컬렉션 클래스 [예 : ArrayLists]의 그룹을 보유한 클래스를 개발하고 지정된 값을 찾으면 모든 컬렉션을 동시에 탐색하여 주어진 값을 찾으면 모든 스레드를 중지합니다.
나는 내 코드를 붙여 넣었고 선물이 반환 된 스레드 중 하나가 true를 반환하면 contains_multiple_collections()에서 어떻게 알 수 있는지 궁금한가요?
감사
그레이엄
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 개의 List 그룹을 설정하고 각각을 1e7 Integers로 채우고 무작위로 알려진 값을 삽입했습니다. 따라서이 방법은 4 천만 개의 값을 통해 단일 값을 검색해야합니다. 그것은 잘 작동하고 빠릅니다. –