Timer vs ExecutorService w Javie?

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.

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.