Может ли кто-нибудь указать мне на фрагмент для выполнения параллельных веб-запросов? Мне нужно сделать 6 веб-запросов и объединить результат HTML.
Есть ли быстрый способ сделать это или я должен идти по пути?
Спасибо.
Использование ExecutorService с Callable<InputStream>.
ExecutorService
Callable<InputStream>
Пример запуска:
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); Future<InputStream> response1 = executor.submit(new Request("http://google.com")); Future<InputStream> response2 = executor.submit(new Request("http://stackoverflow.com")); // ... ByteArrayOutputStream totalResponse = new ByteArrayOutputStream(); copyAndCloseInput(response1.get(), totalResponse); copyAndCloseInput(response2.get(), totalResponse); // ... executor.shutdown();
с
public class Request implements Callable<InputStream> { private String url; public Request(String url) { this.url = url; } @Override public InputStream call() throws Exception { return new URL(url).openStream(); } }
Я рекомендую узнать о java.util.concurrent.ExecutorService . Он позволяет вам одновременно запускать задачи и хорошо работает для сценария, который вы описываете.