1. Concepto
La función de tarea programada cronometrada utiliza principalmente objeto de temporizador en Java, que usa múltiples subprocesos internamente para su procesamiento, por lo que todavía está muy relacionado con la tecnología de múltiples subprocesos. En JDK, la clase de temporizador es el principal responsable de la función de las tareas de planificación, es decir, comenzando a ejecutar una determinada tarea en un momento específico, pero la clase que encapsula la tarea es la clase TimerTask.
Personalice la tarea que se ejecutará heredando la clase TimeTask e implementando el método run ():
public class myTask extiende TimeTask {@Override public void run () {dateFormat dateFormat = timeUtil.df.get (); System.out.println ("Mi tarea se ejecuta" + dateFormat.format (new Date ())); }}Ejecute la tarea en la hora de ejecución ejecutando Timer.schedule (tarea de TimeTask, hora de fecha):
public class run {private static timer Timer = new Timer (); public static void main (string [] args) lanza ParseException {timer.schedule (new MyTask (), TimeUtil.df.get (). Parse ("2017-09-14 09:19:30")); }}Nota: La clase de herramienta de conversión de tiempo garantiza la seguridad del hilo:
public class TimeUtil {public static final ThreadLocal <dateFormat> df = new ThreadLocal <DateFormat> () {@Override DateFormat InitialValue () {return New SimpleDateFormat ("yyyy-mm-dd hh: mm: ss"); }};} 2. Precauciones de clase de temporizador
1. Crear un objeto de temporizador significa que se inicia un nuevo hilo, pero el hilo recién iniciado no es un hilo de demonio. Ha estado funcionando en segundo plano. El hilo del temporizador recién iniciado se puede configurar como un hilo de demonio a través de lo siguiente.
Temporizador de temporizador estático privado = nuevo temporizador (verdadero);
2. De antemano: cuando la hora planificada es anterior a la hora actual, la tarea se ejecutará de inmediato.
3. Retraso: TimeTask se ejecuta uno por uno en una cola, por lo que el tiempo de ejecución puede ser inconsistente con el tiempo que espera, porque la tarea anterior puede llevar mucho tiempo, y el tiempo de ejecución de la tarea posterior se retrasará. La hora de inicio específica de la tarea retrasada se basa en el "tiempo de finalización" de la tarea anterior.
4. Operación periódica: temporizador.schedule (tarea de TimeTask, fecha en la primera vez, período largo) a partir de la primera vez, las tareas se ejecutan cada milisegundos del período:
5. Programa (tarea de TimerTask, retraso largo) La hora actual es el tiempo de referencia. Después de retrasar el número establecido de milisegundos en este momento, se ejecuta la tarea de TimeTask.
6. Programa (Tarea de TimeTask, retraso largo, período largo) El tiempo actual es el tiempo de referencia. Sobre esta base, retrase el número establecido de milisegundos y luego ejecute una tarea con un número infinito de veces a un cierto intervalo.
7. ¿Cuál es la diferencia entre Timer's Cancel () y TimeTask's Cancel ()?
La ejecución de las tareas mencionadas anteriormente se ejecuta una por una en forma de columnas. TimeTask.cancel () se refiere a cancelar la tarea actual de la tarea a la columna. El valor de Timer.cancel () es cancelar todas las tareas en la cola de tareas actual. Vale la pena señalar que el Timer Cancel () a veces no deja de ejecutar tareas planificadas, sino que las ejecuta normalmente. Esto se debe a que el método Cancel () en la clase de temporizador a veces no compite por el bloqueo de la cola, por lo que las tareas en la clase TimeTask continúan ejecutándose normalmente.
3. La diferencia entre ScheduleAtFixedRate (tarea de TimeTask, fecha en la primera vez, período largo) y programación (tarea de TimeTask, fecha en la primera vez, período largo)
Similitudes:
1. El cronograma de métodos y el método ScheduleAtFixedRate se ejecutan en orden, por lo que no se requieren situaciones de seguridad no se requieren.
2.
3.
Diferencias:
Básicamente, no hay diferencia entre el cronograma de métodos y el método ScheduleAtFixedRate en uso, es decir, ScheduleAtFixedRate tiene una ejecución de recuperación. ¿Qué significa? Es decir, si la tarea se interrumpe durante la operación periódica, ScheduleAtFixedRate intentará completar las tareas previamente abandonadas. Y el horario se ignora y luego ejecuta la siguiente tarea. Puede consultar este blog, que está escrito vívidamente.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.