"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo esperar eficientemente una lista de futuros y manejar excepciones?

¿Cómo esperar eficientemente una lista de futuros y manejar excepciones?

Publicado el 2024-11-02
Navegar:117

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

Esperar eficientemente en una lista de futuros

Cuando se trata de una lista de futuros, el objetivo es esperar hasta que se complete o se produzca una excepción en cualquier futuro. Un enfoque ingenuo que incluya llamadas individuales a f.get() puede llevar a esperas innecesarias si se produce una excepción desde el principio.

Evitar esperas innecesarias con CompletionService

Para solucionar este problema problema, la clase CompletionService entra en juego. Permite ejecutar tareas asincrónicas y recuperar sus resultados de forma segura para subprocesos a medida que estén disponibles. Aquí se explica cómo usarlo:

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

Al utilizar el enfoque CompletionService, puede monitorear la finalización de las tareas en tiempo real y detener el procesamiento adicional si ocurre un error, evitando así esperas innecesarias.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3