Разница между TimerTask и Executors.newScheduledThreadPool (1) - PullRequest
12 голосов
/ 24 мая 2011

Мне нужно запланировать некоторые работы, которые будут выполнены в будущем.Я могу сделать это двумя способами:

  1. Создать TimerTask и выполнить timer.schedule(...);

  2. Использовать Executors.newScheduledThreadPool(1):

    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    ScheduledFuture <?> scheduleHandle = scheduler.schedule(pushExternalRunnable,  
            runScheduleDate.getTime() - now.getTime(), TimeUnit.MILLISECONDS);
    

В чем разница между этими двумя способами планирования работы в будущем?

Ответы [ 2 ]

27 голосов
/ 24 мая 2011

Самое большое отличие в том, что таймер будет планировать все свои задачи в одном фоновом потоке. ExecutorService, с другой стороны, создаст новые потоки (при необходимости) для запуска задач (до указанного вами размера пула, в какой момент задачи будут поставлены в очередь).

15 голосов
/ 24 мая 2011

Еще одно отличие состоит в том, что существует необъяснимое исключение.В случае таймера фоновый поток прерывается, но не восстанавливается.С ScheduledExecutor (даже с однопотоковой конфигурацией) ScheduledExecutor может продолжаться после необработанного исключения.Он пытается обеспечить выполнение нужного числа потоков для обработки задач.

ScheduledExecutor также создает будущее, если вы хотите взаимодействовать с процессом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...