thread stop examples example create java timer

stop - java.util.Timer: ¿Está en desuso?



timer java 8 example (6)

Leí en un comentario a esta respuesta y en muchas otras preguntas sobre la programación (lo siento, no hay referencias) que java.util.Timer está en desuso. Realmente espero que no, ya que lo estoy usando como una forma ligera de programar cosas en Java (y funciona bien). Pero si está en desuso, buscaré en otro lado. Sin embargo, un vistazo rápido a los documentos API para 1.6 no dice nada acerca de que está en desuso. Ni siquiera se menciona en la lista obsoleta de Sun.

¿Está oficialmente en desuso * y, de ser así, qué debo usar en su lugar?

* Por otro lado, si no está en desuso, ¿ podrían las personas dejar de hablar mal de este set-o-classes inocente y brillantemente implementado?


Como han mencionado otros, no, no está en desuso, pero personalmente, siempre uso ScheduledExecutorService ya que ofrece una API más rica y más flexibilidad:

  • ScheduledExecutorService permite especificar el número de subprocesos, mientras que el Timer siempre utiliza un único subproceso.
  • ScheduledExecutorService puede construirse con un ThreadFactory permita el control de aspectos de subprocesos que no sean el nombre / estado del demonio (por ejemplo, prioridad, ThreadGroup , UncaughtExceptionHandler ).
  • ScheduledExecutorService permite que las tareas se programen con un retraso fijo, así como a una tasa fija.
  • ScheduledExecutorService acepta Callable / Runnable como unidad de trabajo, lo que significa que no es necesario TimerTask subclase TimerTask específicamente para usarla; es decir, podría enviar la misma implementación Callable a un ExecutorService regular o un ScheduledExecutorService .

Creo que esto es un malentendido. El JavaDoc de la clase Timer menciona a ScheduledThreadPoolExecutor y señala que esta clase es efectivamente un reemplazo más versátil para la combinación Timer / TimerTask. Nada más. El temporizador no está en desuso.

Otra cita de JavaDoc, ScheduledThreadPoolExecutor esta vez:

Un ThreadPoolExecutor que adicionalmente puede programar comandos para que se ejecuten después de un retraso determinado o para que se ejecuten periódicamente. Esta clase es preferible a Temporizador cuando se necesitan múltiples subprocesos de trabajo, o cuando se requieren la flexibilidad o las capacidades adicionales de ThreadPoolExecutor (que se extiende en esta clase).


En jdk1.6_10 no está en desuso, por lo que no hay necesidad de una alternativa.


Hay [JDK-8154799] obsoleto Timer y TimerTask en el rastreador de errores del JDK y, a mediados de 2016, JEP 277 declaró que java.util.Timer (y TimerTask ) quedaría en desuso en el JDK 9.

A varias API de Java SE se les agregará, actualizará o eliminará una anotación @Deprecated. Algunos ejemplos de tales cambios se enumeran a continuación.

[…]

  • añada @Deprecated a java.util.Timer y TimerTask

Sin embargo, en la versión JDK 9, esas clases no están en desuso (las clases en desuso se pueden encontrar en la Lista de desaprobación).


No, no está en desuso. Además de la Lista en desuso de Sun, también verá una nota en el JavaDoc para una clase que ha quedado en desuso. Por ejemplo, la nota para StringBufferInputStream dice:

Obsoleto. Esta clase no convierte correctamente los caracteres en bytes. A partir de JDK 1.1, la forma preferida de crear un flujo desde una cadena es a través de la clase StringReader.


No, no todo. Es posible que desee utilizar otros mecanismos como el Quartz para requisitos de temporizador más complejos, pero el temporizador funciona perfectamente bien y no va a ninguna parte.