Класс Java Timer: задачи таймера прекращают выполнение, если в одной из задач возникает исключение

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

Вывод: run (генерируется исключение)

Вот проблема: мне нужна задача таймера для проверки определенных условий в базе данных (или чего-то еще). Она работала нормально, но иногда база данных (или что-то еще) возвращает некоторые ошибки, генерируется исключение, и таймер выходит из строя, и тогда ни одна задача таймера не выполняется снова. Есть ли какая-то реализация таймера, которая продолжает работать после того, как исключение было выброшено в run () .

Я могу

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);

, но это кажется неуместным.

Другая альтернатива - написать свою собственную реализацию класса Timer, проглатывая исключения метода run (что тоже кажется неправильным).

8
задан Gray 5 January 2012 в 13:15
поделиться