ExecutorService pool = Executors.newFixedThreadPool(dspMap.size());
List<Callable<BaseProtocol>> todo = new ArrayList<>(5);
dspMap.forEach((name, httpRequest) -> {
todo2.add(() -> httpRequest.send());
});
try {
List<Future<BaseProtocol>> res = pool.invokeAll(todo2);
res.forEach(v -> {
//тут в res лежат уже все ответы, а время на выполнение всех запросов будет таким,
//сколько займёт самый долгий ответ
});