Java de la classe Timer: timer tâches d'arrêt à exécuter si dans l'une des tâches exception est levée

new Timer().scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
       System.out.println("run");
       throw new SomeRandomException();
    }
 }, 1000, 1000);

De sortie: run (exception est levée)

Voici le problème: j'ai besoin d'une minuterie tâche de vérifier les conditions spécifiques dans la base de données (ou autre chose). Il a bien fonctionné, mais parfois la base de données(ou autre chose) retourne des erreurs, d'une exception est levée et le compteur se bloque, et puis pas de timer unique tâche est exécutée à nouveau. Est-il certain de la Minuterie de mise en œuvre qui continuent de travailler après l'exception est levée dans run().

Je peux

new Timer().scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        try {
            System.out.println("run");
            throw new SomeRandomException();
        } catch (Exception e) {
            System.out.println("dummy catch");
        }
    }
}, 1000, 1000);

mais cela semble boiteux.

Autre alternative est d'écrire ma propre implémentation de la classe Timer, avaler des exceptions de la méthode run (ce qui semble également pas droit).

Vous avez besoin de prendre Errors et ou ils silencieusement tuer votre tâche.

OriginalL'auteur fiction | 2012-01-05