Sobes.tech
Назад к вопросам
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 для параллельного выполнения и объединения результатов.