Mam kod, w którym planuję zadanie za pomocą java.util.timer. Rozejrzałam się i zobaczyłam, że ExecutorService może zrobić to samo. Mam więc pytanie: czy używaliście Timera i ExecutorService do planowania zadań?
1 odpowiedź
Timer może być wrażliwy na zmiany w zegarze systemowym, ScheduledThreadPoolExecutor nie jest.
Timer ma tylko jeden wątek wykonania, więc długotrwałe zadanie może opóźnić inne zadania. ScheduledThreadPoolExecutor można skonfigurować z dowolną liczbą wątków. Ponadto masz pełną kontrolę nad utworzonymi wątkami, jeśli chcesz (udostępniając ThreadFactory).
Wyjątki czasu wykonywania zgłoszone w TimerTask zabijają ten jeden wątek, przez co Timer jest martwy. tj. Zaplanowane zadania nie będą już działać. ScheduledThreadExecutor nie tylko przechwytuje wyjątki czasu wykonywania, ale umożliwia ich obsługę, jeśli chcesz (poprzez przesłonięcie metody afterExecute z ThreadPoolExecutor) Zadanie, które zgłosiło wyjątek, zostanie anulowane, ale inne zadania będą nadal działać.
Jeśli możesz użyć ScheduledThreadExecutor zamiast Timera, zrób to.