package com.ning.pummel; import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Fight implements Callable<DescriptiveStatistics> { private final int concurrency; private final List<String> urls; public Fight(int concurrency, List<String> urls) { this.concurrency = concurrency; this.urls = urls; } public DescriptiveStatistics call() throws Exception { ExecutorService exec = Executors.newFixedThreadPool(concurrency); ExecutorCompletionService<Poll> ecs = new ExecutorCompletionService<Poll>(exec); try { for (String url : urls) { ecs.submit(new Fist(url)); } DescriptiveStatistics stats = new DescriptiveStatistics(); for (int i = urls.size(); i != 0; i--) { Poll poll = ecs.take().get(); stats.addValue(poll.getTime()); } return stats; } finally { exec.shutdown(); } } }