«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно ждать списка фьючерсов и обрабатывать исключения?

Как эффективно ждать списка фьючерсов и обрабатывать исключения?

Опубликовано 2 ноября 2024 г.
Просматривать:457

How to Efficiently Wait for a List of Futures and Handle Exceptions?

Эффективное ожидание списка фьючерсов

При работе со списком фьючерсов цель состоит в том, чтобы дождаться завершения или появления исключение в любом будущем. Наивный подход, включающий отдельные вызовы f.get(), может привести к ненужному ожиданию, если исключение возникнет на раннем этапе.

Избежание ненужного ожидания с помощью CompletionService

Чтобы решить эту проблему проблема, в игру вступает класс CompletionService. Он позволяет выполнять асинхронные задачи и получать их результаты потокобезопасным способом по мере их доступности. Вот как его использовать:

Executor executor = Executors.newFixedThreadPool(4);
CompletionService completionService = new ExecutorCompletionService(executor);

// Submit tasks to the service
for (int i = 0; i () {
        @Override
        public SomeResult call() {
            // Task logic here
            return result;
        }
    });
}

int received = 0;
boolean errors = false;

// Loop until all tasks are complete or an error occurs
while (received  resultFuture = completionService.take(); // Blocks if nothing available
    try {
        SomeResult result = resultFuture.get();
        received  ;
        // Process result here
    } catch (Exception e) {
        // Log error
        errors = true;
    }
}

// Consider canceling remaining tasks if an error occurred

Используя подход CompletionService, вы можете отслеживать выполнение задач в режиме реального времени и останавливать дальнейшую обработку в случае возникновения ошибки, избегая тем самым ненужного ожидания.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3