La gestion des exceptions de Java ExecutorService tâches

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é la 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<Runnable>() //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!

InformationsquelleAutor Tom | 2010-02-11