Debido a que un programador tiene un background thread that continues running:
correspondiente a cada objeto Timer es un solo hilo de fondo que es utilizado para ejecutar todas las tareas del temporizador, secuencialmente. Las tareas del temporizador deben completarse rápidamente. Si una tarea de temporizador tarda demasiado tiempo en completarse, "encierra" la ejecución de tareas del temporizador subproceso. Esto puede, a su vez, retrasar la ejecución de las tareas posteriores , que puede "agrupar" y ejecutar en sucesión rápida cuando (y si) la tarea ofensiva finalmente se completa.
Como es una cadena de fondo, continúa hasta que la JVM se cierra o se detiene.
Actualización: un poco más sobre esto. Un "hilo de fondo" es lo mismo que un hilo daemon, nombrado por analogía con un proceso daemon BSD. Si ves las javadocs en Thread, encontrará:
marcas de este hilo, ya sea como un hilo de utilidad o un hilo de usuario. La máquina virtual Java se cierra cuando los únicos hilos que se ejecutan son todos hilos daemon .
Cuando finaliza su principal, todos los subprocesos de usuario se detienen, dejando solo los hilos de daemon. La JVM luego se apaga. Para un buen momento, si es corto, llame al Thread.currentThread().setDaemon(true);
desde la página principal.
Actualización: Ack. Tenía ese casi a la derecha. Tienes que hacer que el temporizador sea un daemon en el momento de la construcción. (Cambió esto, o lo que acabo de tener un fallo cerebral?)
De todos modos, aquí está el código ejemplo:
import java.util.*;
class Chatter extends TimerTask {
public void run(){
System.err.println("Timer run.");
}
}
public class TryThread {
public static void main(String[] argv){
// If argument is true, only runs a few times.
Timer t = new Timer(false);
t.schedule(new Chatter(), 1L, 1L);
return ;
}
}
¿No sería horrible si lo hizo desaparecer? Haría casi todas las multitareas más difíciles. –