ExecutorService searchPool = Executors.newFixedThreadPool(providers.length);
// send the request with each provider
List<Future<List<Album>>> results = new ArrayList<Future<List<Album>>>(providers.length);
for (int i = 0; i < providers.length; i++) {
WebClientProvider prov = (WebClientProvider) providers[i];
Future<List<Album>> futureResult = searchPool.submit(new AlbumSearchTask(artist, album, prov));
results.add(futureResult);
}
// no we look at the results, if the user didn't stop the search