Je suis en train d'utiliser Java ThreadPoolExecutor de la classe à exécuter un grand nombre de poids lourds tâches avec un nombre fixe de threads. Chacune de ces tâches a de nombreux endroits au cours de laquelle il peut échouer à cause des exceptions.
J'ai sous-classé ThreadPoolExecutor et j'ai remplacé le "afterExecute" méthode qui est censée fournir toutes les exceptions rencontrées pendant l'exécution de la tâche. Cependant, je n'arrive pas à le faire fonctionner.
Par exemple:
public class ThreadPoolErrors extends ThreadPoolExecutor {
public ThreadPoolErrors() {
super( 1, // core threads
1, // max threads
1, // timeout
TimeUnit.MINUTES, // timeout units
new LinkedBlockingQueue() // work queue
);
}
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if(t != null) {
System.out.println("Got an error: " + t);
} else {
System.out.println("Everything's fine--situation normal!");
}
}
public static void main( String [] args) {
ThreadPoolErrors threadPool = new ThreadPoolErrors();
threadPool.submit(
new Runnable() {
public void run() {
throw new RuntimeException("Ouch! Got an error.");
}
}
);
threadPool.shutdown();
}
}
La sortie de ce programme est "Tout va bien--situation normale!" même si la seule Praticable soumis pool de threads, déclenche une exception. La moindre idée de ce qui se passe ici?
Merci!