Назад к вопросам
Junior — Middle
73
Каким образом реализовать параллельное выполнение нескольких сетевых запросов и объединить их ответы в один контейнер, используя многопоточность?
Ответ от нейросети
sobes.tech AI
Для параллельного выполнения нескольких сетевых запросов в Android можно использовать многопоточность с помощью ExecutorService или библиотек, таких как RxJava или Kotlin Coroutines.
Пример с использованием ExecutorService и Future:
ExecutorService executor = Executors.newFixedThreadPool(3);
Callable<String> request1 = () -> performNetworkRequest(url1);
Callable<String> request2 = () -> performNetworkRequest(url2);
Callable<String> request3 = () -> performNetworkRequest(url3);
List<Callable<String>> tasks = Arrays.asList(request1, request2, request3);
try {
List<Future<String>> futures = executor.invokeAll(tasks);
List<String> results = new ArrayList<>();
for (Future<String> future : futures) {
results.add(future.get()); // Получаем результат каждого запроса
}
// results содержит ответы всех запросов
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executor.shutdown();
}
Таким образом, каждый запрос выполняется в отдельном потоке, а результаты собираются в один список после завершения всех задач.
Если используется Kotlin, то удобнее применять корутины с async и awaitAll для параллельного выполнения и объединения результатов.