O temporizador possui dois modos de execução de tarefas. O mais comumente utilizado é o agendamento, que pode executar tarefas de duas maneiras: 1: em um determinado horário (dados), 2: após um tempo fixo (atraso interno). frequência de execução da tarefa em qualquer uma das seguintes maneiras.
Copie o código do código da seguinte forma:
importar java.io.IOException;
importar java.util.Timer;
classe pública TimerTest {
public static void main(String[] args){
Temporizador temporizador = novo Temporizador();
timer.schedule(new MyTask(), 1000, 2000); //Executa esta tarefa após 1 segundo, com um intervalo de 2 segundos de cada vez. Se passar um parâmetro Data, você pode executar esta tarefa em um horário fixo.
while(true){//Isso é usado para interromper esta tarefa, caso contrário, ele continuará a executar esta tarefa em um loop
tentar {
int ch = System.in.read();
if(ch-'c'==0){
timer.cancel();//Use este método para sair da tarefa
}
} catch (IOException e) {
// TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
}
}
classe estática MyTask estende java.util.TimerTask{
@Substituir
execução void pública() {
// TODO stub de método gerado automaticamente
System.out.println("________");
}
}
}
Se você estiver usando JDK 5+, também há um modo scheduleAtFixedRate disponível. Neste modo, o Timer fará o possível para executar a tarefa em uma frequência fixa. frequência fixa. Após 1 segundo, ele será executado a cada dois segundos. No entanto, como Java não é em tempo real (na verdade, o desempenho em tempo real de Java é muito ruim...), o significado original que expressamos no programa anterior. não pode ser executado estritamente. Se chamarmos ScheduleAtFixedRate, o Timer tentará manter a frequência de execução de sua tarefa a cada 2 segundos. Execute o programa acima, assumindo que ScheduleAtFixedRate seja usado, então o seguinte cenário é possível: Após 1 segundo, MyTask. Executado uma vez, porque o sistema está ocupado, MyTask pode ser executado uma segunda vez após 2,5 segundos. Então, o Timer registra esse atraso e tenta compensar esse atraso na próxima tarefa. Três vezes. "Execute uma tarefa em uma frequência fixa em vez de um tempo de atraso fixo"
Aqui está um exemplo mais complicado, que mostra como sair de um único TimerTask e como sair de todas as tarefas.
Copie o código do código da seguinte forma:
pacote MyTimerTest;
importar java.io.IOException;
importar java.util.Timer;
/*
* Esta classe fornece os principais métodos de uso de Timer e TimerTaske, incluindo personalização de tarefas e adição de tarefas
* Saia da tarefa e saia do cronômetro.
* Como o campo de status do TimerTask é acessível no nível do pacote, não há como acessá-lo fora do pacote java.util.
* Obter seu status, o que causa alguns transtornos à programação. Não podemos julgar o status de uma determinada Tarefa.
*
*/
classe pública TimerTest {
public static void main(String[] args) {
Temporizador temporizador = novo Temporizador();
MinhaTask minhaTask1 = new MinhaTask();
MinhaTask minhaTask2 = new MinhaTask();
minhaTask2.setInfo("minhaTask-2");
timer.schedule(minhaTask1, 1000, 2000);
timer.scheduleAtFixedRate(minhaTask2, 2000, 3000);
enquanto (verdadeiro) {
tentar {
byte[] informação = novo byte[1024];
int len = System.in.read(info);
String strInfo = new String(info, 0, len, "GBK");//Lê informações do console
if (strInfo.charAt(strInfo.length() - 1) == ' ') {
strInfo = strInfo.substring(0, strInfo.length() - 2);
}
if (strInfo.startsWith("Cancel-1")) { myTask1.cancel();//Sair de uma única tarefa
//Na verdade, deve-se julgar aqui se myTask2 também saiu. Nesse caso, ele deve quebrar.
//O status de myTask2, portanto, nenhum julgamento pode ser feito aqui sobre a saída do loop.
} else if (strInfo.startsWith("Cancel-2")) {
minhaTask2.cancel();
} else if (strInfo.startsWith("Cancelar-Tudo")) {
timer.cancel(); //Temporizador de saída
quebrar;
} outro {
// Apenas faça julgamentos sobre myTask1, seja preguiçoso ^_^
minhaTask1.setInfo(strInfo);
}
} catch (IOException e) { // TODO Bloco catch gerado automaticamente
e.printStackTrace();
}
}
}
classe estática MyTask estende java.util.TimerTask {
String informações = "^_^";
@Substituir
execução void pública() {
// TODO stub de método gerado automaticamente
System.out.println(info);
}
string pública getInfo() {
informações de retorno;
}
public void setInfo(Informações da string) {
isto.info = informação;
}
}
}