ExecutorService searchPool = Executors.newFixedThreadPool(providers.length);
// send the request with each provider
List<Future<List<Cover>>> results = new ArrayList<Future<List<Cover>>>(providers.length);
for (Object provider : providers) {
CoverProvider prov = (CoverProvider) provider;
Future<List<Cover>> futureResult = searchPool.submit(new CoverSearchTask(artist, album, prov));
results.add(futureResult);
}
// no we check, if the user didn't stop the search