private JsonArray getFlights( final String from, final String to, final String date, final int numTickets) { List<Future<JsonArray>> list = new ArrayList<>(); ExecutorService executor = Executors.newFixedThreadPool(8); List<Airline> apiUrls = new AirlineFacade().getAirlines(); for (final Airline airline : apiUrls) { Callable<JsonArray> task = new FlightGetterCallable(from, to, date, numTickets, airline.getUrl()); list.add(executor.submit(task)); } executor.shutdown(); JsonArray allFlights = new JsonArray(); for (Future<JsonArray> array : list) { try { allFlights.addAll(array.get()); } catch (InterruptedException | ExecutionException ex) { Logger.getLogger(Flights.class.getName()).log(Level.SEVERE, null, ex); } } return allFlights; }