1. Conceito
A função de tarefa programada cronometrada usa principalmente o objeto Timer no Java, que usa multi-threading internamente para processamento, por isso ainda está muito relacionado à tecnologia de threading com vários threading. No JDK, a classe do temporizador é principalmente responsável pela função das tarefas de planejamento, ou seja, começando a executar uma determinada tarefa em um horário especificado, mas a classe que encapsula a tarefa é a classe Timertosk.
Personalize a tarefa a ser executada herdando a classe Timertosk e implementando o método run ():
public class MyTask estende TimerTask {@Override public void run () {DateFormat DateFormat = timeUtil.df.get (); System.out.println ("Minha tarefa está executando" + dateFormat.Format (new Date ())); }}Execute a tarefa no momento da execução executando o Timer.SCHEDule (Tarefa TimerTask, Data Hora):
classe pública Run {private estático temporizador = new Timer (); public static void main (string [] args) lança parseexception {timer.schedule (new mytask (), timeutil.df.get (). parse ("2017-09-14 09:19:30"); }}Nota: A classe de ferramentas de conversão de tempo garante a segurança do thread:
public class timeUtil {public static final Threadlocal <DeMFormat> df = new ThreadLocal <DeTformat> () {@Override protegido DateFormat InitialValue () {return new SimpleDateFormat ("AA eaa-mm-dd hh: mm: ss"); }};} 2. Precauções da classe do temporizador
1. Criar um objeto de timer significa que um novo thread é iniciado, mas o thread recém -iniciado não é um thread Daemon. Ele está sendo executado em segundo plano. O thread do timer recém -iniciado pode ser definido como um thread Daemon através do seguinte.
Timer estático privado Timer = novo timer (true);
2. Com antecedência: quando o horário planejado for mais cedo do que o horário atual, a tarefa será executada imediatamente.
3. Atraso: o TimerTask é executado um por um em uma fila, portanto, o tempo de execução pode ser inconsistente com o tempo que você espera, porque a tarefa anterior pode levar muito tempo e o tempo de execução da tarefa subsequente será adiado. O tempo de início específico da tarefa atrasado é baseado no "horário final" da tarefa anterior.
4. Operação periódica: Timer.Schedule (Tarefa TimerTask, Data da Primeira vez, Longo Período) A partir da primeira vez, as tarefas são executadas a cada milissegundos de período:
5. Cronograma (Tarefa TimerTask, Longo Atraso) O horário atual é o tempo de referência. Depois de adiar o número definido de milissegundos neste momento, a tarefa TimerTask é executada.
6. Cronograma (Tarefa TimerTask, Longo Atraso, Período Longo) O horário atual é o tempo de referência. Nesta base, adie o número definido de milissegundos e, em seguida, execute uma tarefa com um número infinito de vezes em um determinado intervalo.
7. Qual é a diferença entre o Timer's Cancel () e o Timertosk's cancel ()?
A execução de tarefas mencionadas anteriormente é executada uma por uma na forma de colunas. TimerTask.cancel () refere-se ao cancelamento da tarefa atual da tarefa a coluna. O valor do timer.cancel () é cancelar todas as tarefas na fila de tarefas atuais. Vale ressaltar que o Timer's Cancel () às vezes não para necessariamente para de executar tarefas planejadas, mas as executa normalmente. Isso ocorre porque o método cancel () na classe de temporizador às vezes não compete pelo bloqueio da fila; portanto, as tarefas na classe Timertosk continuam sendo executadas normalmente.
3. A diferença entre ScheduleAtFixedrate (Tarefa TimerTask, Data da primeira hora, período de longo prazo) e cronograma (Tarefa TimerTask, Data da primeira hora, período de longo prazo)
Semelhanças:
1. O cronograma de métodos e o scheduleatfixedrate do método são executados em ordem, portanto, as situações de segurança não-thread não são necessárias.
2. Cronograma de métodos e cronograma de métodos ARGENHOFIXETRATO Se o horário de execução de uma tarefa não estiver atrasado, o tempo de execução da próxima tarefa é calculado com base no tempo no "início" da tarefa anterior.
3. Cronograma de métodos e cronograma de método FIXEDRATE Se o tempo para executar uma tarefa for adiado, o tempo de execução da próxima tarefa for calculado, referindo -se ao horário no final da última tarefa.
Diferenças:
Basicamente, não há diferença entre o cronograma do método e o método ScheduleAtFixedrate em uso, ou seja, o ScheduleAtFixedrate tem execução de recuperação. O que isso significa? Ou seja, se a tarefa for interrompida durante a operação periódica, o ScheduleAtFixedrate tentará preencher as tarefas eliminadas anteriormente. E o cronograma é ignorado e, em seguida, execute a próxima tarefa. Você pode se referir a este blog, que é escrito vividamente.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.