java.util. Таймер: это удерживается от использования?

Я читал в комментарии в этот ответ и во многих других вопросах о планировании (извините, никакие ссылки) это java.util.Timer удерживается от использования. Я действительно надеюсь не, так как я использую его в качестве легкого способа запланировать вещи в Java (и это работает приятно). Но если это будет удерживаться от использования, то я посмотрю в другом месте. Однако беглый взгляд на документы API для 1,6 ничего не говорит об этом удержавший от использования. Это даже не упоминается в Списке Sun Устаревшем.

Это официально удерживается от использования* и если так, что я должен использовать вместо этого?


*, С другой стороны, если это не удерживается от использования, люди могли бы прекратить обливать этот невинный и блестяще реализованный set-o-classes грязью?

17
задан Community 23 May 2017 в 11:45
поделиться

5 ответов

Я думаю, это недоразумение. В JavaDoc класса Timer упоминается ScheduledThreadPoolExecutor и отмечается, что этот класс является более универсальной заменой для комбинации Timer/TimerTask. Больше ничего. Таймер не устарел.

Еще одна цитата из JavaDoc, ScheduledThreadPoolExecutor на этот раз:

ThreadPoolExecutor, который может дополнительно планировать команды для запуска после заданной задержки, или для выполнения периодически. Данный класс предпочтительнее Timer, когда требуется несколько рабочих потоков, или когда требуется дополнительная гибкость или возможности ThreadPoolExecutor (который этот класс расширяет).

7
ответ дан 30 November 2019 в 11:37
поделиться

Метод namedtuple , начинающийся с начального подчеркивания, предназначен только для предотвращения конфликтов имен. Их не следует считать предназначенными только для внутреннего использования :

Для предотвращения конфликтов с именами полей метод и имена атрибутов начинаются с подчеркивания.

-121--3572365-

В jdk1.6_10 она не устарела, поэтому нет необходимости в альтернативе.

-121--2312260-

No. Не все. Вы можете использовать другие механизмы, такие как Quartz для более сложных требований к таймеру, но Timer работает отлично и никуда не денется.

6
ответ дан 30 November 2019 в 11:37
поделиться

Нет, он не испорчен. В дополнение к списку устаревших классов Sun Deprecated List, вы также увидите примечание в JavaDoc для класса, который был устаревшим. Например, в примечании для StringBufferInputStream написано:

Deprecated. Этот класс некорректно преобразует символы в байты. Начиная с JDK 1.1, предпочтительным способом создания потока из строки является класс StringReader.

4
ответ дан 30 November 2019 в 11:37
поделиться

В jdk1.6_10 он не является устаревшим, поэтому нет необходимости в альтернативе.

2
ответ дан 30 November 2019 в 11:37
поделиться

Как отмечали другие, нет, он не является устаревшим, но я лично всегда использую вместо него ScheduledExecutorService , поскольку он предлагает более богатый API и большую гибкость :

  • ScheduledExecutorService позволяет указать количество потоков, тогда как Таймер всегда использует один поток.
  • ScheduledExecutorService может быть сконструирован с ThreadFactory , позволяющим управлять аспектами потока, отличными от имени / статуса демона (например, приоритет, ThreadGroup , UncaughtExceptionHandler ).
  • ScheduledExecutorService позволяет планировать задачи с фиксированной задержкой, а также с фиксированной скоростью.
  • ScheduledExecutorService принимает Callable / Runnable в качестве единицы работы, что означает, что вам не нужно создавать подкласс TimerTask специально для его использования; то есть вы можете отправить ту же реализацию Callable в обычную ExecutorService или ScheduledExecutorService .
15
ответ дан 30 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: