Poiché un timer ha un background thread that continues running:
corrispondente a ciascun oggetto Timer è un singolo filo di fondo che è utilizzato per eseguire tutte compiti del timer, sequenziale. Le attività del timer dovrebbero essere completate rapidamente. Se l'attività di un contatore richiede troppo tempo per essere completata, "manda" il thread di esecuzione del task del timer . Ciò può, a sua volta, ritardare l'esecuzione delle attività successive , che può "raggrupparsi" ed eseguirsi in rapida successione quando (e se) l'attività incriminata finisce definitivamente.
Poiché si tratta di un thread in background, continua fino a quando la JVM non si chiude o viene interrotta.
Aggiornamento: un po 'di più su questo. Un "thread in background" è la stessa cosa di un thread daemon, chiamato per analogia con un processo daemon BSD. Se vedete i javadocs su Thread, troverete:
Marks questa discussione sia come un thread demone o un thread utente. La macchina virtuale Java termina quando i soli thread in esecuzione sono tutti daemon thread.
Quando termina, tutti i thread utente si interrompono, lasciando solo i thread daemon. Quindi la JVM si spegne. Per un buon tempo, se breve, chiama il numero Thread.currentThread().setDaemon(true);
dal principale.
Aggiornamento: Ack. Ho avuto quello quasi a destra. Devi rendere il timer un demone in fase di costruzione. (Forse questo cambiamento, o ho appena avuto un fallimento cervello?)
Comunque, ecco codice di esempio:
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 ;
}
}
Non sarebbe orribile se lo ha fatto andare via? Sarebbe più difficile quasi tutto il multi-tasking. –