2 votes

Les exceptions seront-elles prises en compte dans les tâches suivantes ?

try {
    for (final Future<Boolean> bool : threadPool.invokeAll(tasks)) {
        if (!bool.get()) {
            return false;
        }
    }
    return true;
} finally {
    threadPool.shutdownNow();
    threadPool.awaitTermination(
        IMPORT_THREADS_AWAIT_TERMINATION_TIMEOUT.toMillis(), TimeUnit.MILLISECONDS);
}

Supposons que la tâche puisse lever une exception. Supposons qu'il y ait 5 tâches, et que la 5ème tâche lève une exception, mais que la 1ère tâche de la boucle renvoie un faux. ( et la boucle s'interrompt). Si cette tâche lève une exception, je veux l'attraper et faire un peu de logique de nettoyage. Je me demande si ma logique ne capturera jamais l'exception lancée par la tâche 5 puisque je sors de la boucle à la tâche 1.

  1. Dans ce cas, rencontrerons-nous une exception lancée par la tâche 5 ?

  2. Montrer que threadPool.shutdownNow() lance l'exception de la tâche 5 ?

3voto

孙兴斌 Points 16124

Les exception sera lancé par task5 mais le executor l'attrapera et l'enveloppera en tant que ExecutionException .

Dans ce cas, à moins que vous n'appeliez futureOfTask5.get() , le exception ne sera pas rejetée.

Vous pouvez ajouter try...catch dans le bloc call méthode de task5 pour l'enregistrer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X