El temporizador tiene dos modos para ejecutar tareas. El más utilizado es la programación, que puede ejecutar tareas de dos maneras: 1: en un momento determinado (Datos), 2: después de un tiempo fijo (retardo int). Estos dos pueden especificar el. frecuencia de ejecución de la tarea de cualquiera de las siguientes maneras. Veamos un ejemplo simple:
Copie el código de código de la siguiente manera:
importar java.io.IOException;
importar java.util.Timer;
prueba de temporizador de clase pública {
principal vacío estático público (String [] argumentos) {
Temporizador temporizador = nuevo temporizador();
timer.schedule(new MyTask(), 1000, 2000); // Ejecute esta tarea después de 1 segundo, con un intervalo de 2 segundos cada vez. Si pasa un parámetro de datos, puede ejecutar esta tarea a una hora fija.
while(true){// Esto se usa para detener esta tarea; de lo contrario, continuará ejecutándola en un bucle
intentar {
int ch = Sistema.en.read();
si(ch-'c'==0){
timer.cancel();//Utilice este método para salir de la tarea
}
} captura (IOException e) {
// TODO Bloque de captura generado automáticamente
e.printStackTrace();
}
}
}
La clase estática MyTask extiende java.util.TimerTask{
@Anular
ejecución pública vacía() {
// TODO Código auxiliar de método generado automáticamente
System.out.println("________");
}
}
}
Si estás usando JDK 5+, también hay un modo ScheduleAtFixedRate disponible. En este modo, el temporizador hará todo lo posible para ejecutar la tarea a una frecuencia fija. Por ejemplo: en el ejemplo anterior, queremos que MyTask se ejecute cada vez después de 1 segundo. se ejecuta una vez cada dos segundos, pero debido a que Java no es en tiempo real (de hecho, el rendimiento en tiempo real de Java es muy pobre...), así que El significado original expresado en el programa anterior no se puede implementar estrictamente. Si llamamos a ScheduleAtFixedRate, Timer intentará mantener la frecuencia de ejecución de su tarea cada 2 segundos. Ejecute el programa anterior, suponiendo que esté utilizando ScheduleAtFixedRate. Es posible el siguiente escenario: Después de 1 segundo, MyTask Ejecutado una vez, debido a que el sistema está ocupado, MyTask se puede ejecutar una segunda vez después de 2,5 segundos. Luego, Timer registra este retraso e intenta compensar este retraso en la siguiente tarea. Luego, después de 1,5 segundos, se ejecutará MyTask. Tres veces "Ejecutar una tarea con una frecuencia fija en lugar de un tiempo de retraso fijo"
Aquí hay un ejemplo más complicado, que le indica cómo salir de una sola TimerTask y cómo salir de todas las tareas.
Copie el código de código de la siguiente manera:
paquete MyTimerTest;
importar java.io.IOException;
importar java.util.Timer;
/*
* Esta clase brinda los métodos principales para usar Timer y TimerTaske, incluida la personalización de tareas y la adición de tareas.
* Salga de la tarea y salga del cronómetro.
* Debido a que se puede acceder al campo de estado de TimerTask a nivel de paquete, no hay forma de acceder a él fuera del paquete java.util.
* Obtener su estado, lo que causa algunos inconvenientes a la programación. No podemos juzgar el estado de una determinada Tarea.
*
*/
prueba de temporizador de clase pública {
público estático vacío principal (String [] argumentos) {
Temporizador temporizador = nuevo temporizador();
MiTarea miTarea1 = nueva MiTarea();
MiTarea miTarea2 = nueva MiTarea();
miTarea2.setInfo("miTarea-2");
temporizador.programación(miTarea1, 1000, 2000);
timer.scheduleAtFixedRate(myTask2, 2000, 3000);
mientras (verdadero) {
intentar {
byte[] información = nuevo byte[1024];
int len = System.in.read(información);
String strInfo = new String(info, 0, len, "GBK");//Leer información desde la consola
si (strInfo.charAt(strInfo.length() - 1) == ' ') {
strInfo = strInfo.substring(0, strInfo.length() - 2);
}
if (strInfo.startsWith("Cancel-1")) { myTask1.cancel();//Salir de una sola tarea
// De hecho, aquí se debe juzgar si myTask2 también salió. Si es así, debería fallar, pero porque no se puede obtener fuera del paquete.
// El estado de myTask2, por lo que aquí no se puede juzgar si se debe salir del ciclo.
} else if (strInfo.startsWith("Cancelar-2")) {
miTarea2.cancel();
} else if (strInfo.startsWith("Cancelar todo")) {
timer.cancel();//Salir del temporizador
romper;
} demás {
// Solo haz juicios sobre myTask1, sé flojo ^_^
miTarea1.setInfo(strInfo);
}
} catch (IOException e) { // TODO Bloque catch generado automáticamente
e.printStackTrace();
}
}
}
clase estática MyTask extiende java.util.TimerTask {
Información de cadena = "^_^";
@Anular
ejecución pública vacía() {
// TODO Código auxiliar de método generado automáticamente
System.out.println(información);
}
cadena pública getInfo() {
información de devolución;
}
setInfo pública vacía (información de cadena) {
this.info = información;
}
}
}